gpt4 book ai didi

c++ - 杀死父进程时杀死所有子进程

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:47 25 4
gpt4 key购买 nike

我在 LINUX 下运行一个 C++ 程序。
从我的程序代码中,我使用 system() 调用调用另一个程序:

system("calledProgram opt1 opt2 ... opt_n");

但是这个calledProgram运行了多个进程(有特定的名字,比如p1, p2, p3 , p4).

当我的程序被用户从外部杀死时,如何找到并杀死这些进程。

这里 ( How to kill process in c++, knowing only part of its name ) 描述了如何找到具有特定名称的进程并杀死它们。
但是,如果用户使用来自不同目录的相同选项运行该程序怎么办。我还应该检查运行目录以找到正确的进程吗?

是否有另一种(更好的)方法来终止这些子进程?

PS:当我从 cmd 行运行 calledProgram,然后通过 ctrl+c 杀死它时,它的进程不会被自动杀死。

最佳答案

我建议您使用 fork/exec 而不是 system() 来调用您的新程序。这很容易。参见 this .

这对您的应用程序来说似乎是必要的,因为您需要“calledProgram”作为您程序的子程序,这样当有人杀死您的程序时它就会死掉。

您还需要处理 SIGINT 信号。以最简单的方式,您需要这样的东西:

#include<signal.h>

void signal_handler()
{
kill(0,SIGTERM);
}

int main()
{
signal(SIGINT,signal_handler);
}

关于c++ - 杀死父进程时杀死所有子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30869067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com