4

これについて多くの質問と回答があることは承知していますが、効率的で堅牢なソリューションを探しています。Cocoa アプリ内からプロセスとそのすべての子プロセスを強制終了する必要があります。プロセスIDを取得しました。コーディングしようとしているのは、次のようにkillコマンドを実行することです

kill -- -<parent PID>

私のアプリ内から...しかし、それは私には非常にハックで残忍なようです。より良い解決策はありませんか?Carbon の KillProcess() とその Process Manager の仲間は、プロセス ツリー表現を自分で構築しない限り、あまり役に立たないようです。何か不足していますか?

また、PID に基づいて Quit Apple イベントを送信するコードもいくつかあります。親プロセスによって定義されたツリー内の各プロセスにボトムアップで送信できるとさらに便利です。しかし、それはあると便利なだけです。最初の質問への回答が「ポイント」を獲得します。

4

2 に答える 2

9

killpg を使用して、プロセスとそのグループ内のすべてを終了できます。

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

/* ... */

killpg(getpgid(pid), SIGTERM);

もちろん、適切なエラーチェックを行う必要がありますが、要点を理解する必要があります。詳細については、man ページkill(2)を参照しkillpg(2)てください。

于 2009-06-14T23:38:23.040 に答える
0

これを最後に調べたとき (数年前のことですが、あまり変わっていないと思います)、見つけた最善の解決策は、システムの 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 に答える