如果proc,则终止子流程
kill subprocess if proc
我使用的是C++11和linux。我正试图使用fork()和popen()启动多个ssh命令,并监视ssh命令何时停止运行。当我在另一台计算机上终止ssh命令时,它似乎不会终止启动它的fork()子进程。该子进程继续运行,直到我退出程序。一旦用popen()调用的ssh命令停止运行,我需要做什么来杀死子进程?有什么比popen()调用ssh命令更好的方法吗?
您需要调用wait
或waitpid
,以便O/S删除子进程。一个已完成的子进程的状态没有被其父进程用wait
检索到,它将成为一个"僵尸"进程。
如果您对子进程状态不感兴趣,但只想清理它们,那么可以为SIGCHLD
安装一个信号处理程序,每当您的一个子进程完成时,它就会启动,并在该处理程序中调用wait
来"收获"子进程。
子进程应该定期查询ssh进程id的状态,并根据您得到的响应,决定是否终止它。您可以使用getppid()
来获取父id。获取进程id后,您可以使用检查它是否处于活动状态低于脚本
if ps -p $PID > /dev/null
then
# pid is active do something
fi
相关文章:
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 我收到以下错误:抛出'std::bad_alloc'实例后终止调用
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- llvm构建器向基本块添加终止符
- 如何使用隔离>终止执行来停止所有线程
- 用于将C++代码转换为 Web 程序集的脚本未终止
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 终止 QProcess 不会终止子进程
- 运行代码时,c++ 会终止进程
- 检测到堆栈粉碎:已终止 中止(核心已转储)
- 在输入句子时终止 std::out_of_range
- 二进制搜索的终止点
- MPI:检查是否有任何进程已终止
- 英特尔 TBB 程序不会终止,可能会误用参考计数器
- 如何改进我的代码,使其不会因超时而终止?(黑客排名挑战)
- while 循环不以哨兵值终止
- C++ 程序不会因为内存而终止
- 如果proc,则终止子流程