2017-03-31 101 views
1

命令下面子外殼的打印PID和子外殼子外殼的:如何強制級別2的子shell在自己的pgid?

$ ((echo $BASHPID)& echo $BASHPID)& sleep 1 
[1] 9885 
9885 
9887 
[1]+ Done     ((echo $BASHPID) & echo $BASHPID) 

查閱下面的命令是更復雜,但它表明第二子外殼是在第一子外殼的「進程組」:

$ ((echo $$ $BASH_SUBSHELL $BASHPID ; export BBB=$BASHPID; ps -e -o pid,pgid,ppid,comm | grep -E "$$|$BBB|PGID" | grep -E "bash|PGID")& echo $$ $BASH_SUBSHELL $BASHPID; sleep 1)& sleep 1 
[3] 9973 
2787 1 9973 
2787 2 9975 
    PID PGID PPID COMMAND 
2787 2787 2769 bash 
9973 9973 2787 bash 
9975 9973 9973 bash 

有沒有簡單的方法來創建類似的命令,將顯示第二列最後一行的唯一編號?

回答

0

由於您正在使用&操作員從當前進程(PGID)中分離子殼,因此無法執行此操作,因此將在單獨的進程(新的PGID)上運行。

入住這也是那些:How to set process group of a shell script

+0

但首先,爲什麼子shell都有自己的PGID和第二子shell - 不? (並且屬於拳頭子外殼PGID)。換句話說,我想再次脫離第一個外殼PGID – noonex

+0

你的子殼是嵌套的,外部的PPID是bash控制檯本身,它的PGID是它自己分離後的一個。我仍然想知道爲什麼inner subshel​​l沒有自己的PGID。 –

+0

只是意識到我沒有回答你的問題:p –

相關問題