서브쉘에서 하위 프로세스를 생성할 수 있나요?

서브쉘에서 하위 프로세스를 생성할 수 있나요?

따라서 다음 명령을 입력하면 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 실행 파일 자체를 직접 실행합니다.

그러니 문제없어요할 수 있는, 하지만 문제는선택하지 않음,최적화.

관련 정보