初学linux中的进程通信有一些函数調用的流程不是很清楚,下面直接上代码来具体说明一下:
通过不断测试代码并且在网上查找资料我发现17其实是信号量SIGCHLD对应的数值,而SIGCHLD昰什么含义呢翻看我上一篇博客就可以知道,SIGCHLD的意思是当子进程结束时通知父进程所以kill(child,17)相当于向子进程发送这个信号,signal(17,func)是相当于把SIGCHLD这個信号和func函数绑定在一起因此第一次利用kill发送信号时会触发一次func函数,之后子进程结束时也会触发一次func函数所以func函数会被调用两次。
raise函数是向进程本身发送信号所以kill函数改为raise函数的区别只不过为kill函数是向子进程发送信号了,raise函数是向当前进程发送信号了发送信号后嘟会触发func函数。
这个例子里如果在休眠的10秒之中,通过命令行将子进程杀死的话子进程的休眠会立刻结束,调用func函数而不是等到休眠的10秒结束才有所反应。意思也就是说如果子进程是正在休眠时收到信号的则停止休眠进行信号处理;如果信号是在休眠前或是休眠后收到的则不影响休眠。
上面是我对这个流程的理解一直在网上没找到什么相关博客,如果理解不对还请大神们指点一下菜鸟