![Bash에서 실행될 때 내 프로그램은 어떤 프로세스 그룹에 속합니까?](https://linux55.com/image/70709/Bash%EC%97%90%EC%84%9C%20%EC%8B%A4%ED%96%89%EB%90%A0%20%EB%95%8C%20%EB%82%B4%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%80%20%EC%96%B4%EB%96%A4%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EA%B7%B8%EB%A3%B9%EC%97%90%20%EC%86%8D%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
프로그램을 처음부터 실행한다면 bash
내 프로그램은 쉘과 동일한 프로세스 그룹에 속합니까, 아니면 새로운 프로세스 그룹에 속합니까?
쉘을 만들 때씨, 신호를 처리해야 합니다 SIGINT
.
이제 Ctrl+는 포그라운드에 있지만 동일한 프로세스 그룹에 속한 프로세스에 신호를 보냅니다 C.SIGINT
Bash 세션을 종료할 수 없습니다.
답변1
bash-4.3$ ps -j | cat
PID PGID SID TTY TIME CMD
4586 4586 4586 pts/1 00:00:00 bash
4600 4600 4586 pts/1 00:00:00 ps
4601 4600 4586 pts/1 00:00:00 cat
bash-4.3$ ps -j; ps -j
PID PGID SID TTY TIME CMD
4586 4586 4586 pts/1 00:00:00 bash
4602 4602 4586 pts/1 00:00:00 ps
PID PGID SID TTY TIME CMD
4586 4586 4586 pts/1 00:00:00 bash
4603 4603 4586 pts/1 00:00:00 ps
대화형 쉘일하다이는 프로세스 그룹을 통해 달성됩니다. 대화형 셸 작업을 실행하기 위해 프로세스 그룹이 생성됩니다. 대화형 셸은 프로세스 그룹과 실제로 혼합되는 유일한 명령입니다.
위는 ps -j | cat
(프론트) 업무입니다. 둘 ps
다 cat
동일한 프로세스 그룹에 있으면 쉘은 이를 터미널의 전경 프로세스 그룹으로 만들고 ^C
SIGINT를 이들에게 보냅니다.
두 번째 예에는 두 개의 연속된 작업이 있습니다.
존재하다
bash-4.3$ (ps -j; ps -j)
PID PGID SID TTY TIME CMD
4586 4586 4586 pts/1 00:00:00 bash
4633 4633 4586 pts/1 00:00:00 bash
4634 4633 4586 pts/1 00:00:00 ps
PID PGID SID TTY TIME CMD
4586 4586 4586 pts/1 00:00:00 bash
4633 4633 4586 pts/1 00:00:00 bash
4635 4633 4586 pts/1 00:00:00 ps
서브 쉘은 직업입니다. 서브쉘 자체는 비대화형 쉘로 간주될 수 있습니다.