私は見たこの動画これは、括弧内のコマンドを実行すると、実際には元のシェルのサブプロセスであるサブシェルでコマンドを実行することを示しています。次の実験を実行します。
// one shell with PID 5344
~$ (find /)
// another shell
~$ ps l
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
...
0 1000 5344 5333 20 0 10888 5220 do_wai Ss pts/0 0:00 bash
0 1000 5384 5333 20 0 10888 5140 do_wai Ss pts/1 0:00 bash
0 1000 7239 5344 20 0 10860 3444 - R+ pts/0 0:00 find /
4 1000 7240 5384 20 0 11400 3224 - R+ pts/1 0:00 ps l
間に他のシェルがないの子であるfind /
ことがわかります。5344
実行する場所:
// one shell with PID 5344
(cd /; find /)
// second shell
~$ ps l
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
...
0 1000 5344 5333 20 0 10888 5220 do_wai Ss pts/0 0:00 bash
0 1000 5384 5333 20 0 10888 5140 do_wai Ss pts/1 0:00 bash
1 1000 7379 5344 20 0 10888 3036 do_wai S+ pts/0 0:00 bash
4 1000 7380 7379 20 0 10864 3536 - R+ pts/0 0:01 find /
4 1000 7381 5384 20 0 11400 3184 - R+ pts/1 0:00 ps l
今、私たちは途中で別の殻を見ることができます。私の考えでは、これはbashのいくつかの最適化のようです。最初のケースでは、実際に別のシェルを作成する必要はないので、そうしません。 2番目のケースでは、コマンドにが含まれているため、cd /
現在のシェルに影響を与えるため、別のプロセスを作成する必要があります。そうですか?