如何在第2级强制子shell在自己的pgid?

时间:2017-03-31 13:15:39

标签: bash subshell

下面的命令打印子shell的pid和子shell的子shell:

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

现在,下面的命令更复杂,但它表明第二个子shell位于'进程组'第一个子shell:

$ ( ( 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

是否有简单的方法来创建类似的命令,该命令将显示第二列中最后一行的唯一编号?

1 个答案:

答案 0 :(得分:0)

没有办法这样做,因为你正在从当前进程(PGID)中拆除子弹并使用&因此,运算符将在单独的进程(新PGID)上运行。

还要检查这些:How to set process group of a shell script