Process

優雅地獲取後代程序列表

  • September 5, 2020

我想獲得所有從$pid. 這是我想出的最簡單的方法:

pstree -p $pid | tr "\n" " " |sed "s/[^0-9]/ /g" |sed "s/\s\s*/ /g"

是否有任何命令或任何更簡單的方法來獲取所有後代程序的完整列表?

以下內容稍微簡單一些,並且具有忽略命令名稱中的數字的額外優勢:

pstree -p $pid | grep -o '([0-9]\+)' | grep -o '[0-9]\+'

或者使用 Perl:

pstree -p $pid | perl -ne 'print "$1\n" while /\((\d+)\)/g'

我們正在尋找括號內的數字,例如,當我們遇到gif2png(3012). 但是,如果命令名稱包含帶括號的數字,則所有賭注都將關閉。只有到目前為止文本處理可以帶你。

所以我也認為流程組是要走的路。如果你想讓一個程序在它自己的程序組中執行,你可以使用 Debian 軟體包 ‘daemontools’ 中的 ‘pgrphack’ 工具:

pgrphack my_command args

或者你可以再次轉向 Perl:

perl -e 'setpgid or die; exec { $ARGV[0] } @ARGV;' my_command args

這裡唯一需要注意的是程序組不會嵌套,因此如果某個程序正在創建自己的程序組,則其子程序將不再位於您創建的組中。

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