QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2348|回复: 2

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

[复制链接]
发表于 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,执行完自身后久结束了,而处于睡眠状态的两个子进程没有得到唤醒。
不知道有没有表述清楚,希望高人指点一下,不胜感激。
发表于 2007-1-1 06:23:05 | 显示全部楼层
按ctrl-c的时候产生SIGINT信号,这时终端驱动程序产生此信号并送到前台进程组中的每一个进程,包括你的程序里的子进程。而你的子进程调用sleep,sleep收到SIGINT信号,于是就唤醒继续执行,如果子进程中没有对SIGINT信号捕捉,系统默认动作就是终止该进程了。所以你的子进程序是被终止的而不是没有被唤醒。

不知道我说的对不对。
回复

使用道具 举报

发表于 2007-4-3 12:03:22 | 显示全部楼层
可以按照1楼的解释来检验一下;
新开一个终端
kill -INT 父进程号
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-2 00:29 , Processed in 0.065402 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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