特定のプロセスグループ内のすべてのプロセスを一覧表示する簡単な方法がないのはなぜですか?

特定のプロセスグループ内のすべてのプロセスを一覧表示する簡単な方法がないのはなぜですか?

明らかにkill(0)を効果的にサポートするには、カーネルはプロセスグループのプロセスを追跡する必要があります。ただし、その情報はどのような方法でもユーザー空間に公開されません。この情報を取得するには、procfsツリー全体を繰り返してpgidを確認する必要があります。

これはLinux、* BSDなどに当てはまります。私が確認したすべての* nixシステムにはこの問題がありました。なぜこのように設計されたのですか?

編集する:kill(0) 例が理解できるように質問を変更します。

ベストアンサー1

出力をフィルタリングして、特定のグループ内のすべてのプロセスを一覧表示できますps

ps -e -o pgid,pid | awk -v p=1234 '$1 == p {print $2}'

PGIDで直接フィルタリングするオプションはありませんps。おそらく役に立たないからです。

フードの下に何があるかはps問題ではありません。

kill -- -1234しかし、プロセスグループのプロセスを自動的にリストする方法がありますが、利点は何ですか?リストを処理すると、リストが不完全または終了し、PIDが再利用されたプロセスが含まれている可能性があります。

プロセスグループのプロセスセットに役立つタスクを実行するには、カーネルはグループメンバーを一覧表示するインターフェイスだけでなく、タスクを実行するインターフェイスも公開する必要があります。唯一のインターフェイスは、プロセスに信号を送信することです。

おすすめ記事