나는 보았다이 비디오이는 괄호 안의 명령을 실행하면 실제로는 원래 쉘의 하위 프로세스인 서브쉘에서 명령을 실행한다는 것을 설명합니다. 다음 실험을 실행합니다.
// 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의 일부 최적화인 것 같습니다. 첫 번째 경우에는 실제로 다른 쉘을 생성할 필요가 없으므로 그렇게 하지 않습니다. 두 번째 경우에는 명령에 가 포함되어 있으므로 cd /
현재 셸에 영향을 미치므로 다른 프로세스를 생성해야 합니다. 그렇습니까?