c++ - 如果 proc 则终止子进程

标签 c++ linux c++11

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

最佳答案

您需要调用waitwaitpid以便操作系统删除子进程。一个已完成的子进程如果其父进程没有通过 wait 检索其状态,就会成为“僵尸”进程。

如果您对子进程状态不感兴趣,而只想清理它们,则可以为 SIGCHLD 安装一个信号处理程序,只要您的子进程之一完成,该处理程序就会触发,并在该处理程序中调用 wait 来“收获”子进程。

关于c++ - 如果 proc 则终止子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31055008/

相关文章:

c++ - 为什么initializer_list没有违反 "One Class-Type Conversion"的规则

c++ - 在三元中使用 std::greater<K> 和 std::greater_equal<K>

c++ - lexical_cast int 到字符串

linux - 如何将环境变量传递给 Ubuntu 上的 Netbeans Makefile?

c - 如何使用 rsyslogd 登录到/var/log/mail.log?

linux - 如何在Linux中读取扩展的PCIE配置空间?

c++ - 非静态成员引用的二维数组问题

java - C++中的工厂模式。实例化问题

c++ - 使用 websocketpp 库在多线程程序中为 endpoint.listen() 创建一个单独的 boost 线程

c++ - 理解 std::function 和 std::bind