我正在使用 C++11 和 Linux。我正在尝试使用 fork() 和 popen() 启动多个 ssh 命令,并监视 ssh 命令何时停止运行。当我终止另一台计算机上的 ssh 命令时,它似乎没有终止启动它的 fork() 子进程。子进程继续运行,直到我退出程序。一旦使用 popen() 调用的 ssh 命令退出运行,我需要做什么来终止子进程?有没有比 popen() 更好的方法来调用 ssh 命令?
最佳答案
您需要调用wait
或waitpid
以便操作系统删除子进程。一个已完成的子进程如果其父进程没有通过 wait
检索其状态,就会成为“僵尸”进程。
如果您对子进程状态不感兴趣,而只想清理它们,则可以为 SIGCHLD
安装一个信号处理程序,只要您的子进程之一完成,该处理程序就会触发,并在该处理程序中调用 wait
来“收获”子进程。
关于c++ - 如果 proc 则终止子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31055008/