7

Perl スクリプトからプロセスとそのすべての子プロセスを強制終了する最良の方法は何ですか? 少なくとも Linux と Solaris で動作し、追加のパッケージをインストールする必要はありません。

私の推測では、 /proc 内のファイルを解析するか、出力を解析することによって、すべてのプロセスとその親のリストを取得することになりますps(どちらも Linux と Solaris の間で移植可能ではないようです)。次に、ツリー内のすべてのプロセスを強制終了します (競合状態になりやすいようです)。

この特定のケースでは、競合状態に耐えることができますが、プロセス リストを移植可能に取得するにはどうすればよいでしょうか?

4

3 に答える 3

9

プロセスグループを強制終了しても問題ない場合は、次を使用できます。

kill -$signum, $pgid;

ここ$signumで、 はシグナル番号、$pgidはプロセス グループ ID です。ただし、シグナル番号はあまり移植性がありません。その場合、(一部のプラットフォームではperlfunc、説明を読んでください) 次のことを行うことができます (たとえば、 を送信するSIGTERMため):

kill 'TERM', -$pgid;
于 2008-11-20T16:29:23.833 に答える
8

CPANには答えがあります。はい、追加のモジュールをインストールしたくないことは知っていますが、少なくとも実装を見て、それらが何をしているのかを確認できます...

https://metacpan.org/pod/Proc::ProcessTable

于 2008-11-20T16:35:08.767 に答える