6

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

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

如您所见,有一个“&”字符,以便我可以在后台运行 fooprocess 应用程序。我怎样才能杀死这个 fooprocess?

非常感谢。

4

3 回答 3

5

要与进程交互,您需要它的 PID。我不确定是否有可能,system但一种替代方法是使用 fork + exec 自己分叉进程。

于 2010-12-14T04:50:26.873 回答
3

您绝对不能system("foo &");用来创建以后可以监视/杀死的后台进程。任何这样的使用都有一个巨大的固有错误:即使您知道 pid,也无法判断具有该 pid 的进程是您最初运行的进程,还是后来碰巧获得相同 pid 的完全不同的进程。

要解决这个问题(以及无数其他您不想考虑的问题,否则会令您头疼),您应该忘记您曾经了解过该system功能并使用forkand exec, or创建您的子进程posix_spawn。这将导致一个直接的子进程(您当前的方法是创建孙子进程,这些子进程将被孤立并被init进程接收),您可以wait/waitpid打开它,并且在您执行wait操作之前,子进程的 pid属于您并且不能被重用,所以向它发送信号是安全的,等等。

于 2010-12-14T07:55:40.503 回答
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");

那可行。

于 2010-12-14T05:52:19.203 回答