サブシェルからサブプロセスを作成できますか?

サブシェルからサブプロセスを作成できますか?

したがって、次のコマンドを入力すると、PID 4920サブシェルは子プロセス()を生成します。

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

最初の例では、サブシェルがサブプロセスを生成できるのはなぜですか?

ベストアンサー1

それは缶の問題ではありません。ご覧のとおり、両方ともサブプロセスを作成します。

違いは、2番目のケースでは、シェルの最後のコマンドがpsによって実行されることです。

それ以降は何も起こらないため、bashはフォークされたプロセスで実行しないことを決定し、以前にフォークせずにps実行可能ファイル自体を直接実行します。

だから問題ありません。できるしかし、問題は選択しない、最適化。

おすすめ記事