弄了一天了,也不知道怎么回事,请大家帮我一下,求求你们了。
来源: 互联网 发布时间:2015-12-08
本文导语: 正在做LINUX的课程设计,关于SIGNAL和KILL的事,怎么也弄不明白了。我知道它们是干什么用的,和基本上如何使用,可一到程序中就不明白了,请大家帮我分析下面程序的执行过程,谢谢大家了。 #include #include #include #i...
正在做LINUX的课程设计,关于SIGNAL和KILL的事,怎么也弄不明白了。我知道它们是干什么用的,和基本上如何使用,可一到程序中就不明白了,请大家帮我分析下面程序的执行过程,谢谢大家了。
#include
#include
#include
#include
void waiting(),stop();
int wait_mark;
main()
{
int p1,p2,i;
while((p1=fork())==-1);
if(p1>0)
{
while((p2=fork())==-1);
if(p2>0)
{
wait_mark=1;
signal(SIGINT,stop);
waiting();
kill(p1,16);
kill(p2,17);
wait(0);
wait(0);
printf("nParent process is killed!n");
exit(0);
}
else
{
wait_mark=1;
signal(17,stop);
waiting();
lockf(stdout,1,0);
printf("nChild process 2 is killed by parent!n");
lockf(stdout,0,0);
exit(0);
}
}
else
{
wait_mark=1;
signal(16,stop);
waiting();
lockf(stdout,1,0);
printf("nChild process 1 is killed by parent!n");
lockf(stdout,0,0);
exit(0);
}
}
void waiting()
{
while(wait_mark !=0);
}
void stop()
{
wait_mark=0;
}
#include
#include
#include
#include
void waiting(),stop();
int wait_mark;
main()
{
int p1,p2,i;
while((p1=fork())==-1);
if(p1>0)
{
while((p2=fork())==-1);
if(p2>0)
{
wait_mark=1;
signal(SIGINT,stop);
waiting();
kill(p1,16);
kill(p2,17);
wait(0);
wait(0);
printf("nParent process is killed!n");
exit(0);
}
else
{
wait_mark=1;
signal(17,stop);
waiting();
lockf(stdout,1,0);
printf("nChild process 2 is killed by parent!n");
lockf(stdout,0,0);
exit(0);
}
}
else
{
wait_mark=1;
signal(16,stop);
waiting();
lockf(stdout,1,0);
printf("nChild process 1 is killed by parent!n");
lockf(stdout,0,0);
exit(0);
}
}
void waiting()
{
while(wait_mark !=0);
}
void stop()
{
wait_mark=0;
}
|
其实就是让你理解几个函数:
signal--信号函数,signal(SIGINT,stop);这句说的是当发生SIGINT后,调用stop函数。
wait--等待子进程返回,这里wait(0)表示,不关心子进程返回状态。
lockf--设置文件锁。
kill--向进程或者进程组发送信号。
你可以去查一下,16,17对应的信号处理函数是什么。
signal--信号函数,signal(SIGINT,stop);这句说的是当发生SIGINT后,调用stop函数。
wait--等待子进程返回,这里wait(0)表示,不关心子进程返回状态。
lockf--设置文件锁。
kill--向进程或者进程组发送信号。
你可以去查一下,16,17对应的信号处理函数是什么。
|
信号16、17就是SIGUSR1、SIGUSR2,是用户自定义信号,在程序中就是用于父子进程间通信。