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来处理的!


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



你可能感兴趣的:(UNIX网络编程卷一:第五章 TCP客户/服务器程序实例)