2017-03-31 99 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 –

相关问题