LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 813|回复: 3

关于signal的几个疑问?

[复制链接]
发表于 2007-4-5 16:22:27 | 显示全部楼层 |阅读模式
下面是我一本书上的实现软中断通信的例子,按书上说:父进程捕捉键盘上发出的中断信号(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;
}
 楼主| 发表于 2007-4-5 22:25:39 | 显示全部楼层
有人知道么?还是发错版了
回复 支持 反对

使用道具 举报

发表于 2007-4-6 11:08:10 | 显示全部楼层
呃, 没有发错版.

在你的例子里面 wait_flag 没有发挥作用,或者说没有意义.
然后, 父进程在睡觉(sleep)的时候子进程就已经完了

btw: 你这个例子是哪来的? 如果是哪本书上的,建议把书当废纸给卖了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-7 08:55:20 | 显示全部楼层
谢谢ls的
清华出版社的《操作系统试验指导》上的例子。。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表