- 论坛徽章:
- 0
|
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
void waiting( );
void stop( int sig);
int wait_mark;
int main( )
{
int p1,p2;
while((p1=fork())==-1);
if(p1==0)
{
wait_mark=1;
(void) signal(16,stop);
waiting();
lockf(stdout,1,0);
printf("Child process1 is killed by parent!");
lockf(stdout,0,0);
exit(0);
}
else
{
while ((p2=fork())==-1);
if (p2==0)
{
wait_mark=1;
(void) signal(17,stop);
waiting();
lockf(stdout,1,0);
printf("Child process1 is killed by parent!");
lockf(stdout,0,0);
exit(0);
}
else
{
wait_mark=1;
(void) signal(2,stop);
waiting( ); /*等待接收ctrl+c信号*/
kill(p1,SIGUSR1); /*向p1发出信号16*/
kill(p2,SIGUSR2); /*向p2发出信号17*/
/*同步*/
wait(0);
wait(0);
printf("parents is killed \n");
exit(0);
}
}
}
void stop(int sig)
{
wait_mark=0;
}
void waiting()
{
while(wait_mark!=0);
}
最后出来的是一按Ctrl+C程序就结束了,而且只打印出了parents is killed ,而且我查看了一下进程,发现子进程都有建立,就是没有运行,我用的是Ubunut6.06请大家帮个忙,找一下原因。 |
|