Linux
‘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)
誰能解釋這裡發生了什麼?我得到什麼作為這些例子的輸出?
格式標誌 (
-o format
) 後面的等號禁止列印將生成的選項列命名為輸出的標題。這可以測試空(空)結果。預設情況下,
ps
選擇與終端會話的目前使用者具有相同有效使用者 ID 的所有程序。在符號之後指定感興趣的 PID 會=
推斷標題行包含該 PID。報告的其他程序是您的終端會話 —bash
以及ps
程序本身。如果你這樣做,你可以看到這個:ps -o comm,pgid=21814