我有一个程序,其中我使用fork。在子进程中,我只是登录到远程服务器并执行命令。在父进程中,我等待孩子完成其任务。如果它没有在预定的时间内完成它,我使用kill(child_pid,SIGTERM)杀死子进程。 但我注意到这留下了像
这样的僵尸进程93113 s000 Z+ 0:00.00 (ssh)
随着超时时间的增加,僵尸进程也会增加,最终不再使用ssh。
如何在不创建困扰我的僵尸的情况下杀死子进程?
答案 0 :(得分:5)
即使你kill
孩子,你仍然需要wait
。
答案 1 :(得分:1)
您必须在父进程中侦听SIGCHLD
并使用wait()
等获取子进程的退出代码。