작업 제어에 관한 bash 참조 매뉴얼을 읽고 있었는데여기(강조):
작업 제어 사용자 인터페이스의 구현을 용이하게 하기 위해 운영 체제는 현재 터미널 프로세스 그룹 ID의 개념을 유지합니다.이 프로세스 그룹의 구성원(프로세스 그룹 ID가 현재 터미널의 프로세스 그룹 ID와 동일한 프로세스)는 SIGINT와 같은 키보드 생성 신호를 수신합니다. 이러한 과정프런트에 있다고 합니다. 백그라운드 프로세스는 프로세스 그룹 ID가 터미널 프로세스 그룹 ID와 다른 프로세스를 의미합니다.
이를 확인하기 위해 몇 가지 실험을 실행하려고 하는데 예상한 결과를 얻지 못합니다.
두 개의 터미널 창이 실행 중입니다(내 기본 터미널은 변경 사항이 있을 경우 거기에서 실행됩니다) zsh
.bash
"실험" 과정은 다음과 같습니다.
- 터미널 A에서 긴 프로세스를 실행하려면 다음을 선택합니다.
ping -c 4000 google.com
- 터미널 B에서
pgid
터미널 A에서 실행 중인 ping을 확인하면 터미널 A와 동일해야 합니다. - 터미널 A에서 일시 중지 문자를 보내면 이제 핑이 일시 중지되고 터미널 A의 작업에 추가되어야 합니다.
- ping 명령을 확인하면
pgid
터미널 A와 달라야 합니다.
프로세스 정보를 확인하려면 다음 명령을 사용합니다.
ps -e --forest -o pid -o ppid -o comm -o pgid | grep -E 'bas|zsh|pin'
실제 결과
핑을 쳐다보기 전에
287562 287551 | \_ zsh 287562
351151 287562 | | \_ bas 351151
354401 287551 | \_ zsh 354401
354486 354401 | \_ bas 354486
전경에서 핑을 본 후:
287562 287551 | \_ zsh 287562
351151 287562 | | \_ bas 351151
354401 287551 | \_ zsh 354401
354486 354401 | \_ bas 354486
359864 354486 | pin 359864 # shouldn't this be the same as bash above ?
보류 중인 신호를 보낸 후:
287562 287551 | \_ zsh 287562
351151 287562 | | \_ bas 351151
354401 287551 | \_ zsh 354401
354486 354401 | \_ bas 354486
359864 354486 | pin 359864 # shouldn't this change after moving to the background?
내 질문은: 왜 상위 터미널과 동일한 터미널이 ping
없습니까 ? 전경에서 배경으로 이동할 때 핑이 변경되지 않는 이유는 무엇입니까 ?pgid
pgid