明らかに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が再利用されたプロセスが含まれている可能性があります。
プロセスグループのプロセスセットに役立つタスクを実行するには、カーネルはグループメンバーを一覧表示するインターフェイスだけでなく、タスクを実行するインターフェイスも公開する必要があります。唯一のインターフェイスは、プロセスに信号を送信することです。