놀라운 점: Interactive Bash는 별도의 프로세스 그룹에서 명령을 실행합니다.

놀라운 점: Interactive Bash는 별도의 프로세스 그룹에서 명령을 실행합니다.

놀랍게도 적어도 Bash 4.4.19부터 Interactive Bash는 별도의 세션에서 명령을 실행합니다. 실행 후 다음 프로세스 목록을 참조하십시오 sleep 8888.

PGID    PID       PPID
3150071 3150071  252603     -bash
3194323 3194323 3150071       sleep 8888

of는 bash와 같지 않지만 PPID는 동일하다는 PGID것을 알 수 있습니다 .sleep

테스트는 Ubuntu Bionic에서 수행되었습니다.

이 동작 변경에 대한 문서가 있습니까? 아니면 처음부터 항상 이랬던 걸까요?

별도의 세션에서 명령을 실행한다는 것은 bash가 종료될 때 SIGHUP 효과가 전혀 발생하지 않음을 의미합니다. 아마도 이것이 이유일 것입니다.https://www.sobyte.net/post/2022-04/linux-nohup-setsid-disown/#about-설명하다

실제로 최신 버전의 bash에서는 bash가 SIGHUP 명령을 백그라운드 프로그램에 보내지 않습니다. 이는 백그라운드에서 &로 끝나는 모든 프로세스가 터미널의 SIGHUP 신호에 의해 종료되지 않음을 의미합니다.

편집: "세션" 대신 "프로세스 그룹"이라는 용어를 사용해야 했습니다.

답변1

엄밀히 말하면 작업 제어 기능을 갖춘 대화형 Bash는 명령을 개별적으로 실행합니다.프로세스 그룹, 세션 대신:

   SESS    PGID     PID    PPID COMMAND
1082760 3784151 3784151 1082760 bash
1082760 3784782 3784782 3784151 sleep 120

내가 아는 한, 이것은 사실이었습니다(적어도 Bash 2.0 이후). Bash 변경 로그에서 관련 변경 사항에 대한 참조를 찾을 수 없습니다. 작업 제어가 활성화되면 bash는 사용자가 를 누를 때 파이프를 배경으로 이동할 수 있어야 하며 CtrlZ이를 위해 각 파이프는 다른 프로세스 그룹에서 실행됩니다.

바라보다업무통제과Bash 매뉴얼에 있습니다. 에서 언급했듯이신호부, Bash는 관련 프로세스 그룹에 신호를 명시적으로 다시 보냅니다.

관련 정보