首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果进程,则删除子进程

如果进程,则删除子进程
EN

Stack Overflow用户
提问于 2015-06-25 23:46:57
回答 2查看 261关注 0票数 0

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

EN

回答 2

Stack Overflow用户

发布于 2015-06-26 00:08:04

为了让操作系统删除子进程,您需要调用waitwaitpid。已完成的子进程如果其父进程未使用wait检索其状态,则子进程将成为“僵尸”进程。

如果您对子进程状态不感兴趣,但只想清理它们,那么可以为SIGCHLD安装一个信号处理程序,它将在某个子进程完成时触发,并在该处理程序中调用wait来“获取”该子进程。

票数 1
EN

Stack Overflow用户

发布于 2015-06-25 23:57:49

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

代码语言:javascript
复制
if ps -p $PID > /dev/null
then
   # pid is active do something
fi
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31055008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档