|
下面是我一本书上的实现软中断通信的例子,按书上说:父进程捕捉键盘上发出的中断信号(Delete),当父进程收到中断信号中的某一个,父进程调用Kill()向两个子进程发送16.17的软中断信号终止子进程
以下不明白的地方:
(1)signal(sig,funciton)这个函数的功能应该只是设置sig信号的处理函数funtion吧?
(2)我不按(Delete),它也会自动结束子进程。按照程序里的代码,父进程应该是直接调用Kill()把他们结束的,根本不用我按Delete.而且在子进程1,2中根本不等父进程Kill()发出的信号,提前通过exit(0)退出了呀?这个例子MS不能反映要实现的功能。不知这样想对不对?
(3)wait_fag是什么意思?
我的机子在产生子进程后的调度策列是先执行子进程后执行父进程!
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
int wait_flag; //一直没搞明白这个是干吗的?=1和=0有啥区别?
void stop ();
main ()
{ int pid1,pid2;
signal(3,stop);
while((pid1=fork())==-1);
if(pid1>0){
while((pid2=fork())==-1);
if(pid2>0){
wait_flag=1;
sleep(5);
kill(pid1,16);
kill(pid2,17);
wait(0);
wait(0);
printf("\n Parent process is killed !!\n");
exit(0);
}
else{
wait_flag=1;
signal(17 ,stop);
printf("\n Child process2 is killed !!\n");
exit(0);
}
}
else {
wait_flag=1;
signal(16,stop);
printf("\n Child process1 is killed !!\n");
exit(0);
}
}
void stop(){
wait_flag=0;
} |
|