4

我知道对此有很多问题和答案,但我正在寻找一种有效且强大的解决方案。我需要从 Cocoa 应用程序中终止一个进程及其所有子进程。我得到了进程 ID,我要编写的代码是像这样执行 kill 命令

kill -- -<parent PID>

从我的应用程序中......但这对我来说似乎非常糟糕和残酷。没有更好的解决方案吗?Carbon 的 KillProcess() 和它的 Process Manager 朋友似乎没有多大帮助,除非我自己构建一个流程树表示。我错过了什么吗?

我还有一些代码可以根据 PID 发送退出 Apple 事件。如果能够将其发送到由父进程定义的树中的每个进程,自下而上,那就更好了。但这只是锦上添花。第一个问题的答案得到“点”。

4

2 回答 2

9

您可以只使用 killpg 来终止进程及其组中的所有内容:

#include <signal.h>
#include <unistd.h>

/* ... */

killpg(getpgid(pid), SIGTERM);

当然,应该进行适当的错误检查,但你应该了解要点。请参阅手册页kill(2)killpg(2)更多信息。

于 2009-06-14T23:38:23.040 回答
0

我最后一次研究这个(几年前,但我认为没有太大变化)我发现的最佳解决方案就是调用 system kill 命令。

system( "ps axwww | grep -i CoreServices/Dock.app/Contents/MacOS/Dock | grep -v grep | awk '{print $1}' | xargs kill -3" );
于 2009-06-15T00:45:01.023 回答