Linux

‘ps -o pgid’ 的奇怪行為

  • October 20, 2015

簡介:我有一個守護程序,它產生程序,我必須優雅地停止它。我在網上找到的基於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

引用自:https://unix.stackexchange.com/questions/237394