【Linux】子进程的异步等待方式

来源:互联网 发布:js数组对象排序函数 编辑:程序博客网 时间:2024/06/08 14:13

        子进程在终止时会给父进程发 SIGCHLD 信号,该信号的默认处理动作是忽略,父进程可以自定义 SIGCHLD 信号的处理函数,这样父进程只需专心处理自己的工作,不必关心子进程了,子进程终止时会通知父进程,父进程在信号处理函数中调用 wait 清理子进程即可。

一、子进程退出时给父进程发送信号

vim mysig.c



vim Makefile


运行结果如下:


我们可以看到子进程退出时给父进程发送了 17 号信号,我们用命令 kill -l 查看信号列表,可以看到 17 号信号就是 SIGCHLD 信号。




二、父进程异步等待子进程

vim sigchld.c



vim Makefile


运行结果如下:


        我们可以发现父进程 fork 出子进程,子进程调用 exit(1)  终止,父进程自定义 SIGCHLD 信号的处理函数,在其中调用 wait 获得了子进程的退出状态并打印。父进程先每隔一秒打印一次,五秒后子进程打印,然后子进程彻底退出,父进程一直打印直到我们强制停止它。