laowuz 发表于 2006-12-5 22:15:01

请教一个有关进程通信的问题

编制实现软中断通信的程序
使用系统调用fork()创建两子进程,再用系统调用signal()让父进程捕捉键盘上发出的中断信号(即按 ctrl+c键)。当父进程收到这个软中断后,父进程用kill()向两个子进程分别发送整数值为16和17的软中断信号,子进程获得对应中断信号后分别输出下列信息后终止:
Child process 1 is killed by parent !!
Child process 2 is killed by parent !!
父进程调用wai()等待两个子进程终止后,输出以下信息,结束执行:
Parent process is killed!!

我的具体方法是:用fork创建两个子进程后,总是先执行这两个新进程,所以用sleep让他们先进入睡眠状态。按ctrl+c后父进程发出两个kill,执行完自身后久结束了,而处于睡眠状态的两个子进程没有得到唤醒。
不知道有没有表述清楚,希望高人指点一下,不胜感激。

ly8683783 发表于 2007-1-1 06:23:05

按ctrl-c的时候产生SIGINT信号,这时终端驱动程序产生此信号并送到前台进程组中的每一个进程,包括你的程序里的子进程。而你的子进程调用sleep,sleep收到SIGINT信号,于是就唤醒继续执行,如果子进程中没有对SIGINT信号捕捉,系统默认动作就是终止该进程了。所以你的子进程序是被终止的而不是没有被唤醒。

不知道我说的对不对。

lovechinesepeop 发表于 2007-4-3 12:03:22

可以按照1楼的解释来检验一下;
新开一个终端
kill -INT 父进程号
页: [1]
查看完整版本: 请教一个有关进程通信的问题