我看到這樣的SIGCHLD處理器的一些例子:SIGCHLD處理程序重新安裝
void child()
{
wait(0);
signal(SIGCHLD, child);
}
void server_main()
{
...
signal(SIGCHLD, child);
...
for(;;;) {
...
switch(fork()) {
...
}
}
有兩個部分在混淆我的處理程序: 1)。當孩子終止或停止時,SIGCHLD被捕獲。那麼爲什麼需要在處理程序中調用wait?信號已經到達。 2)。爲什麼需要重新安裝SIGCHLD處理程序。信號調用是否會一勞永逸地安裝處理程序?
謝謝!
謝謝,我看到了第一點。對於第二個,信號處理程序是爲父權安裝的?爲什麼當多個子進程死亡可能會導致信號處理程序不起作用? – Oxdeadbeef
請看看sarnold的解釋,他解釋得相當不錯。 – halfdan