我使用的是C++11和linux。我正在尝试使用fork()和popen()启动多个ssh命令,并监视ssh命令何时停止运行。当我在另一台计算机上终止ssh命令时,它似乎没有终止启动它的fork()子进程。子进程继续运行,直到我退出程序。当ssh命令在popen()退出运行时被调用时,我需要做些什么来杀除子进程?有没有比popen()更好的方法来调用ssh命令呢?
发布于 2015-06-26 00:08:04
为了让操作系统删除子进程,您需要调用wait或waitpid。已完成的子进程如果其父进程未使用wait检索其状态,则子进程将成为“僵尸”进程。
如果您对子进程状态不感兴趣,但只想清理它们,那么可以为SIGCHLD安装一个信号处理程序,它将在某个子进程完成时触发,并在该处理程序中调用wait来“获取”该子进程。
发布于 2015-06-25 23:57:49
子进程应该定期查询ssh进程id的状态,并根据您得到的响应来决定是否终止它。您可以使用getppid()来获取父id。获取进程id后。您可以使用以下脚本检查它是否处于活动状态
if ps -p $PID > /dev/null
then
# pid is active do something
fihttps://stackoverflow.com/questions/31055008
复制相似问题