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。素晴らしいツールだけでなく、デーモンが何であるかについての良い説明も提供します。 」

- 必ずそうしなければなりません。

関連情報