如何从系统函数调用中删除后台进程

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

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

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

非常感谢。

要与流程进行交互,您需要其PID。 我不确定系统是否可行,但另一种方法是使用fork + exec自行分叉。

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

要解决这个问题(以及无数其他你不想考虑的问题,否则它会让你头疼)你应该忘记你曾经学过system函数并用forkexecposix_spawn创建你的子进程。 这将导致直接的子进程(您当前的方法创建的孙子进入孤立并被init进程接收),您可以wait / wait执行,直到您执行wait操作,子进程的pid 属于您并且无法重复使用,因此向其发送信号等是安全的。

我用这个尝试了你的问题:

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

那可行。