如何在不让父进程等待直到子进程被杀死的情况下追踪子进程的死亡?
我正在尝试一种客户端 - 服务器方案,其中服务器接受来自客户端的连接,并为它接受的每个连接分叉一个新进程.
我忽略了SIGCHLD信号以防止僵尸创建.
signal(SIGCHLD, SIG_IGN);
while(1)
{
accept();
clients++;
if(fork() ==0)
{
childfunction();
clients--;
}
else
{
}
}
Run Code Online (Sandbox Code Playgroud)
上述场景中的问题是,如果子进程在childfunction()函数中被杀死,则全局变量clients不会减少.
注意:我正在寻找一种不使用SIGCHLD信号的解决方案......如果可能的话
我正在制作一个程序,它像服务器一样运行,因此它会不断运行poll。我需要处理Ctrl-C和Ctrl- D。虽然Ctrl-D在使用时非常容易使用poll(您也只需poll使用POLLINon stdin),但我无法为信号提出一个漂亮的解决方案。我是否需要创建一个虚拟文件,信号处理程序在退出时会向其中写入一些内容,或者管道可以很好地满足此目的?