子shell可以创建子进程吗?

子shell可以创建子进程吗?

因此,如果我输入如下命令,PID 4920子 shell 就会创建一个子进程 ( )。

linuxprobe@DESKTOP-TP0G72N:~$ (sleep 2;ps -f --forest;sleep 5)
UID          PID    PPID  C STIME TTY          TIME CMD
linuxpr+     513     512  0 Feb17 pts/0    00:00:00 -bash
linuxpr+    4920     513  0 01:35 pts/0    00:00:00  \_ -bash
linuxpr+    4922    4920  0 01:35 pts/0    00:00:00      \_ ps -f --forest

如果我输入如下命令,似乎没有创建子进程

linuxprobe@DESKTOP-TP0G72N:~$ (ps -f --forest)
UID          PID    PPID  C STIME TTY          TIME CMD
linuxpr+     513     512  0 Feb17 pts/0    00:00:00 -bash
linuxpr+    5511     513  0 01:45 pts/0    00:00:00  \_ ps -f --forest

为什么第一个例子中subshel​​l可以创建子进程呢?

答案1

这不是能不能的问题,而是能不能的问题。正如您所看到的,两者都创建了一个子流程。

不同之处在于,在第二种情况下,shell 中的最后一个命令是 ps 执行。

因为此后没有发生任何事情,所以您的 bash 决定不在分叉进程中执行,而是直接执行 ps 可执行文件本身,而无需之前分叉。

所以,不是一个问题,但问题是选择不,进行优化。

相关内容