我知道有这个很多的问题和答案,但我在寻找一个有效和可靠的解决方案。我需要杀一个过程,它的所有子进程从一个Cocoa应用程序中。我得到的进程ID和什么我将码是像这样执行kill命令

kill -- -<parent PID>

这是我的应用程序内......但似乎非常哈克和残酷的给我。是不是有更好的解决办法? Carbon的KillProcess()和它的流程管理器的朋友似乎太大的帮助没有,除非我建立一个进程树表示自己。我缺少的东西吗?

我也有一些代码来发送基于PID的退出苹果事件。要能够发送到每个进程由父进程,自下而上定义的树它会更好。但是,这只是一个不错的到了。对第一个问题的答案获得“点”。

有帮助吗?

解决方案

您可以只使用killpg终止其组的过程中,一切:

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

/* ... */

killpg(getpgid(pid), SIGTERM);

适当的错误检查应该做的,当然,但你应该得到的要点。详情参见手册页kill(2)killpg(2)

其他提示

在我最后一次看这个(这是一个几年前,但我不觉得太大的改变),我找到了最好的解决办法只是调用系统kill命令。

system( "ps axwww | grep -i CoreServices/Dock.app/Contents/MacOS/Dock | grep -v grep | awk '{print $1}' | xargs kill -3" );
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top