「ps -o pgid」の奇妙な動作

「ps -o pgid」の奇妙な動作

要約:プロセスを生成するデーモンがあり、正常に停止する必要があります。オンラインで見つけたpgidベースのソリューション:

group_id=$(ps -o pgid= $(cat $pidfile))
if [ ! -z $group_id ]; then
        kill -- -$group_id
    success
fi

どのように動作するか知りたいです。私が最初に遭遇したのはgroup_idを取得することでした。私はここで何が起こっているのか理解していません。

$ ps -o pgid= 21814
21813

$ ps -o pgid=21814
21814
3525
5180

しかし、「=」の後にスペースがある最初の例は必須です。

$ pstree -p | grep 21814
     |-python(21814)-+-python(21815)-+-{python}(21813)

何が起こっているのかを説明できる人はいますか?この例の結果は何ですか?

答え1

型フラグ(-o format)の後にある等号は、出力として生成されたオプション列を指定するヘッダーの印刷を抑制します。これはnull(空)結果をテストします。

デフォルトでは、psターミナルセッションの現在のユーザーと同じ有効ユーザーIDを持つすべてのプロセスが選択されます。シンボルの後に関心のあるPIDを指定すると、=ヘッダー行にそのPIDが含まれていると推定されます。報告される他のプロセスは、端末セッションbashおよびpsプロセス自体のプロセスです。これにより、次のことがわかります。

ps -o comm,pgid=21814

関連情報