バックグラウンドの子プロセスは親プロセスで死ぬのですか?

バックグラウンドの子プロセスは親プロセスで死ぬのですか?

いくつかの異なる添え字を呼び出すスクリプトがあります。後で終了し、すべてのサブスクリプトが終了するようです。

ほとんどの場合、これは私が望むものです。しかし、子供が死ぬことを望まない状況は1つか2つあります。

&スクリプトを呼び出すときに使用すると、これが発生しないようにすることができました。

誰でもこれを確認できますか?

ベストアンサー1

ここで考慮すべき多くの要因があります。この答えを受けてくださいわずかなこのすべての詳細を記憶に書いたとき、私は懐疑的でした。 (タイプミスがある場合は編集またはコメントでお知らせください。)

バックグラウンドコマンドを使用した&後に親シェルが正常に終了すると、バックグラウンドコマンドは引き続き実行されます。

ただし、インタラクティブに実行している場合、端末が読み書きするときに「バックグラウンド」コマンドがブロックされます。 (これは親シェルがまだ実行されているかどうかにかかわらず適用されます。)stdout、stdin、およびstderrがリダイレクトされる場合は重要ではありません。

バックグラウンドにコマンドを入れた後にSSHセッションが切断されると、バックグラウンドコマンドが終了する可能性があります。私はこれがあなたのシェルがすべてのサブプロセスにSIGHUPを送るからだと思いますが、詳細を100%確信することはできません。

ジョブをバックグラウンドに設定した後(bash組み込みを使用disown)拒否すると、単にSSHセッションが終了してもジョブは終了しません。ただし、端末で書き込みまたは読み取ろうとしたときにブロックされる側面はまだ適用されます(対話型セッションの場合)。

私が知っている最も一般的な方法は、バックグラウンドで添字やプロセスを開始して、それを生成するシェルに何が起こるか(対話式で始まるかスクリプトから始まるか)影響を受けないようにすることです。

nohup somecommand >/dev/null 2>&1 </dev/null &

これは、標準出力や標準エラーに対するコマンド出力には興味がなく、標準入力を提供する必要がないと仮定します。

サブスクリプトが親のファイル記述子を継承するのに満足している場合(つまり、端末に問題がない場合や他の回避策がある場合)、実際に必要なのは次のとおりです。

./some-sub-script &
exit

注意して実行し続けるように設計されたデーモンを作成する場合お願いします(a)丸太を使用し、(b)丸太をきれいに循環させます。

おすすめ記事