UNIX网络编程卷一:第五章 TCP客户/服务器程序实例

POSIX 信号处理

信号:

1、由一个进程发送给另一个进程。

2、由内核发送给某个进程。

如SIGCHLD信号就是由内核在任何一个进程终止时,发送给该进程的父进程。


每个信号有一个与之关联的处置,或称为行为(action)(信号处理函数)。可以通过sigaction函数设置信号的行为。

1)设置信号处理函数

这种行为称为捕获信号。但是有两个信号不能被捕获:SIGKILL SIGSTOP 。 信号处理函数的原型为:

void handler(int signo);

2)将信号的处置设定为SIG_IGN来忽略该信号。SIGKILL  SIGSTOP不能被忽略。

3)把某个信号的处置设定为SIG_DFL来启动它的默认处置。默认处置通常为:在收到信号后终止进程,其中某些喜好还在当前

工作目录产生一个进程的核心映像(core dump)


当fork一个进程,但是没有wait时,那么会产生僵死进程。


书上的练习代码:https://github.com/huntinux/unpvol1/tree/master/5chp

注意 wait和waitpid的区别。

当有5个进程同时终止,但是SIGCHLD的处理函数只执行一次的话,还是会产生僵死进程!

v3文件夹的代码使用wait,就会产生这样的错误。

所以正确的代码是循环调用waitpid来处理的!





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值