신호(sighup), 작업 및 제어 터미널에 대한 설명

신호(sighup), 작업 및 제어 터미널에 대한 설명

그래서 저는 두 가지 다른 관점을 읽었고 어느 ​​것이 옳은지 알아내려고 노력하고 있습니다.

1) 온라인의 일부 소스에서는 제어 터미널에서 전송된 신호가 포그라운드 프로세스 그룹으로만 전송된다고 말합니다. 즉, 로그아웃 시 프로세스가 백그라운드에서 계속 실행되도록 하려면 작업을 일시 중지(ctrl-Z)하고 백그라운드에서 다시 시작(bg)하면 충분합니다. 그런 다음 로그아웃하면 SIGHUP이 포그라운드 작업에만 전송되므로 계속 실행됩니다.

보다:http://blog.nelhage.com/2010/01/a-brief-introduction-to-termios-signaling-and-job-control/

...또한 터미널에서 신호 생성 문자를 읽으면 포그라운드 프로세스 그룹에 적절한 신호가 생성됩니다....

2) 다른 소스에서는 프로그램이 실행될 때 "nohup" 명령을 사용해야 한다고 주장합니다. 그렇지 않으면 실행 중에 "disown" 명령을 실행하여 SIGHUP을 수신하는 작업 테이블에서 프로그램을 제거합니다. 로그아웃할 때 이 작업을 수행하지 않으면 프로세스가 백그라운드 프로세스 그룹에서 실행 중이더라도 종료된다고 합니다.

예를 들어:http://docstore.mik.ua/orelly/unix3/upt/ch23_11.htm

...어쨌든 로그아웃하면 쉘이 내 백그라운드 작업에 HUP 신호를 보냅니다...

Ubuntu Linux를 사용한 내 실험에서는 1)이 올바른 것 같습니다. 나는 명령을 실행했습니다: "sleep 20 &" 그런 다음 로그아웃했다가 다시 로그인하고 "ps aux"를 눌렀습니다. 물론 sleep 명령은 여전히 ​​실행 중이었습니다.

그렇다면 왜 그렇게 많은 사람들이 2번을 믿는 것 같나요? 그리고 당신이 해야 할 일은 작업을 계속 실행하기 위해 백그라운드에 작업을 배치하는 것뿐이라면 왜 그렇게 많은 사람들이 "nohup"과 "disown"을 사용합니까?

관련 정보