如果proc,则终止子流程

kill subprocess if proc

本文关键字:终止 proc 如果      更新时间:2023-10-16

我使用的是C++11和linux。我正试图使用fork()和popen()启动多个ssh命令,并监视ssh命令何时停止运行。当我在另一台计算机上终止ssh命令时,它似乎不会终止启动它的fork()子进程。该子进程继续运行,直到我退出程序。一旦用popen()调用的ssh命令停止运行,我需要做什么来杀死子进程?有什么比popen()调用ssh命令更好的方法吗?

您需要调用waitwaitpid,以便O/S删除子进程。一个已完成的子进程的状态没有被其父进程用wait检索到,它将成为一个"僵尸"进程。

如果您对子进程状态不感兴趣,但只想清理它们,那么可以为SIGCHLD安装一个信号处理程序,每当您的一个子进程完成时,它就会启动,并在该处理程序中调用wait来"收获"子进程。

子进程应该定期查询ssh进程id的状态,并根据您得到的响应,决定是否终止它。您可以使用getppid()来获取父id。获取进程id后,您可以使用检查它是否处于活动状态低于脚本

if ps -p $PID > /dev/null
then
   # pid is active do something
fi