如何终止使用C语言的系统函数调用执行的后台进程。例如,我有一个编译的应用程序调用“fooprocess”。然后我想编写一个程序,使用系统函数在后台执行fooprocess应用程序,请在下面看代码,
const char app[] = "fooprocess &";
system(app);
正如你所看到的,有一个“&”字符,以便我可以在后台运行fooprocess应用程序。我该怎样杀死这个过程?
非常感谢。
答案 0 :(得分:5)
要与流程进行交互,您需要其PID。我不确定是否可以使用system
,但另一种方法是使用fork + exec自行分叉进程。
答案 1 :(得分:2)
您绝对无法使用system("foo &");
创建后续监控/终止的后台进程。任何此类用法都有一个巨大的固有错误:即使您知道pid,也无法判断具有该pid的进程是否是您最初运行的进程,或者是否发生了完全不同的进程后来得到同样的pid。
要解决这个问题(以及无数其他你不想考虑的问题,或者它会让你的头受伤),你应该忘记你曾经学过system
函数并用{{创建你的子进程1}}和fork
,或exec
。这将导致直接子进程(您当前的方法正在创建孤立并由posix_spawn
进程接收的孙子进程),您可以init
/ wait
进行,直到执行waitpid
操作,子进程的pid 属于您,无法重复使用,因此向其发送信号等是安全的。
答案 2 :(得分:0)
我用这个尝试了你的问题:
ps -axc|grep -i myApp|awk '{print $1}' | tr -d '\n' | xargs -0 kill
你可以将它放在system()中,如下所示:
system("ps -axc|grep -i myApp|awk '{print $1}' | tr -d '\n' | xargs -0 kill");
这将有效。