Mac OS X的:杀最快的方式/从Cocoa应用程序中退出的整个流程树
-
13-09-2019 - |
题
我知道有这个很多的问题和答案,但我在寻找一个有效和可靠的解决方案。我需要杀一个过程,它的所有子进程从一个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" );
不隶属于 StackOverflow