` (sleep 123 &)` bash의 작업 제어에서 프로세스 그룹을 제거하시겠습니까?

` (sleep 123 &)` bash의 작업 제어에서 프로세스 그룹을 제거하시겠습니까?

다음 메소드를 실행하십시오.

$ (sleep 123 &)
$ jobs
$ 

sleep 123Bash에서 프로세스 그룹 제거일하다제어? 위의 방법과 그때의 방법 disown의 차이점은 무엇인가요 ? 프로세스 sleep 123는 여전히 사라진 하위 쉘이 이끄는 동일한 프로세스 그룹에 있고 대화식 쉘과 동일한 프로세스 세션에 있으므로 동일한 제어 터미널을 공유합니다.

쉘의 작업 제어에 속하지 않는다는 것은 sleep 123프로세스가 bash 프로세스에서 보낸 신호(SIGHUP 포함)를 수신하지 않는다는 의미입니까?

감사해요.

답변1

예, 말하자면 제거되었습니다.

대화형 bash 스크립트에서 하위 쉘을 실행하면 터미널의 전경 프로세스 그룹이 되는 새 프로세스 그룹(작업)이 생성되며, (예를 들어 ) (...)에 의해 종료되는 명령이 포함된 하위 쉘의 경우 이 명령은 다음과 같습니다. 매우&sleep 3600 &동일한 포그라운드 프로세스 그룹, 여기서 SIGINTSIGQUIT는 무시되고 해당 입력은 /dev/null)에서 리디렉션됩니다. 바라보다여기표준에 대한 일부 링크.

하위 쉘이 종료 되면 (...)포그라운드 작업이 쉘 작업 목록에서 제거되고 sleep 3600명령은 쉘 제어 외부에서 계속 실행됩니다.

(sleep 3600 &)이는 비대화형으로 실행하는 것과 완전히 다릅니다.스크립트(...)모든 것(메인 셸, 하위 셸 및 하위 셸 foo &내부 또는 외부의 "백그라운드" 명령( ) (...))이 동일한 프로세스 그룹에서 실행되는 작업 제어가 없습니다 .

관련 정보