如何从系统函数调用中杀死后台进程

时间:2010-12-14 04:41:04

标签: c system kill background-process

如何终止使用C语言的系统函数调用执行的后台进程。例如,我有一个编译的应用程序调用“fooprocess”。然后我想编写一个程序,使用系统函数在后台执行fooprocess应用程序,请在下面看代码,

const char app[] = "fooprocess &";
system(app);

正如你所看到的,有一个“&”字符,以便我可以在后台运行fooprocess应用程序。我该怎样杀死这个过程?

非常感谢。

3 个答案:

答案 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");

这将有效。