따라서 다음 명령을 입력하면 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
그것은 캔의 문제가 아닙니다. 보시다시피 둘 다 하위 프로세스를 생성합니다.
차이점은 두 번째 경우에는 쉘의 마지막 명령이 ps에 의해 실행된다는 것입니다.
그 이후에는 아무 일도 일어나지 않기 때문에 bash는 포크된 프로세스에서 실행하지 않기로 결정하고 이전에 포크하지 않고 ps 실행 파일 자체를 직접 실행합니다.
그러니 문제없어요할 수 있는, 하지만 문제는선택하지 않음,최적화.