rc.local에서 nohup을 사용하여 실행 중인 프로세스가 종료되는 이유는 무엇입니까?

rc.local에서 nohup을 사용하여 실행 중인 프로세스가 종료되는 이유는 무엇입니까?

아래에 다음 스크립트가 있습니다라즈베리 파이 제시:

파일 test.sh에는 다음이 포함됩니다.

#!/bin/sh -e
nohup sleep 321 &
sleep 120
false
exit 0

터미널 세션에서 일반 사용자로 실행할 때 다음이 발생합니다.

pi@raspberrypi:~ $ ps -ejf |grep sleep
pi        5073  5072  5072  4618  0 15:16 pts/1    00:00:00 sleep 321
pi        5074  5072  5072  4618  0 15:16 pts/1    00:00:00 sleep 120

스크립트가 종료된 후 sleep 321프로세스의 상위가 다시 지정되고 예상대로 계속 실행됩니다.

pi@raspberrypi:~ $ ps -ejf |grep sleep
pi        5073     1  5072  4618  0 15:16 pts/1    00:00:00 sleep 321

왜 이것이 에서 작동하지 않습니까 rc.local? 실행 명령이 nohup방금 종료되었습니다.

pi@raspberrypi:~ $ ps -ejf |grep sleep
root       450   449   449   449  0 15:45 ?        00:00:00 sleep 321
root       451   449   449   449  0 15:45 ?        00:00:00 sleep 120

120초가 지나면 sleep 321프로세스가 사라집니다.

rc.localfalse로 바꿀 때만 작동 하므로 false || true스크립트 실행과 관련이 있는 것 같습니다. 그런데 -e터미널에서 실행하는 것과 시작 시 실행하는 것 사이에 차이가 있는 이유는 무엇입니까?test.shrc.local

답변1

nohup무시 만 SIGHUP허용되기 때문입니다 . 그러나 UNIX 프로세스에는 "세션"이라는 개념도 있습니다. 프로세스를 데몬화하는 일반적인 접근 방식은 SIGHUP을 무시하는 것보다 시간이 더 오래 걸리는 것입니다.

~처럼진 파블로프스키그의 제안에논평: "한 번 보세요daemonize. 훌륭한 도구일 뿐만 아니라 데몬이 무엇인지에 대한 좋은 설명도 제공합니다. "

- 꼭 그래야 해요.

관련 정보