터미널 에뮬레이터 탭을 닫은 후에도 "disown -h"를 사용하면 크롬 브라우저가 지속되는 이유는 무엇입니까?

터미널 에뮬레이터 탭을 닫은 후에도 "disown -h"를 사용하면 크롬 브라우저가 지속되는 이유는 무엇입니까?

존재하다nohup에도 불구하고 터미널을 닫으면 Chrome 브라우저가 종료되는 이유는 무엇입니까?, 터미널 에뮬레이터 탭에 쓰고 실행했습니다.

$ nohup chromium-browser &

터미널 탭을 닫으면 Chrome 브라우저도 종료됩니다. Mark는 크롬 브라우저가 무시에서 기본값(종료)까지 SIGHUP의 작업을 무시하기 때문이라고 대답했습니다.

대신에 위의 내용을 반복 disown -h하면 nohup,

$ chromium-browser & disown -h

터미널 탭을 닫아도 크롬 브라우저가 종료되지 않는 이유는 무엇입니까? (이것은 disown -h셸의 작업 목록에서 크롬 브라우저 프로세스를 제거하지 않으므로 크롬 브라우저 프로세스가 여전히 셸에서 SIGHUP을 수신한다고 가정합니다.)

감사해요.

답변1

크롬은 좀 더 복잡하므로 대신 sleep을 사용합니다.

$ nohup sleep 1000 >& /dev/null &
[1] 5283

여기에는 HUP를 무시하는 수면 프로세스가 있습니다. HUP를 전송하여 시연합니다.

$ kill -SIGHUP 5283
$ kill -SIGHUP 5283
$ kill -SIGHUP 5283

바라보다? 아무 일도하지.

다시 거부해 봅시다:

$ sleep 1000 &
[1] 5293
$ disown -h

여기에는 HUP를 무시하지 않는 수면 프로세스가 있습니다. HUP를 전송하여 시연합니다.

$ kill -SIGHUP 5293
$ kill -SIGHUP 5293
bash: kill: (5293) - No such process
[1]+  Hangup                  sleep 1000

하하, 죽었어.

이전 터미널을 닫은 후 새 터미널에서 이 작업을 수행할 수도 있습니다. 분명히 disown -h 후에 터미널을 닫으면 HUP가 전송되지 않습니다.

그렇다면 nohup chromium은 왜 HUP를 무시하지 않습니까? nohup은 HUP를 무시하도록 설정하지만 Chromium은 이 설정을 복원하도록 선택할 수 있습니다. 따라서 nohup은 신호 처리기에 대한 자체 아이디어를 가진 프로세스에 대해 매우 비효율적입니다.

HUP를 무시하지 않기로 선택하는 프로세스가 HUP를 무시하도록 만드는 한 가지 방법은 처음부터 HUP를 보내지 않는 것입니다. 그러면 HUP에 대해 알지 못하고 HUP를 처리하는지 여부와 처리 방법이 중요하지 않게 됩니다.

관련 정보