スクリプトを実行するときに非対話型bashプロセスの終了が子プロセスに影響を与えたり影響を与えたりしないのはなぜですか?

スクリプトを実行するときに非対話型bashプロセスの終了が子プロセスに影響を与えたり影響を与えたりしないのはなぜですか?

Bashスクリプトがありますscript1

#! /bin/bash
evince 

そして別のスクリプトscript2

#! /bin/bash
evince &

私が走るとき

./script2

bashプロセスはevinceバックグラウンドに入った直後に終了し、evinceプロセスは引き続き実行されます。

私が走るとき

./script1 &

bashプロセスがevince実行が完了するのを待っています。

私がbashプロセスの場合、killbashプロセスは終了し、プロセスは終了しますevince

evincebashプロセスの終了が2番目のスクリプトのプロセスには影響しませんが、最初のスクリプトのプロセスに影響を与える理由を知りたいです。

fork(), exit()などのシステムコールに関して説明できますかwait()

ありがとうございます。

これは以下に関連しています。バックグラウンドで実行されるこのスクリプトがシェルを "kill" 呼び出して終了しても生き残ることができるのはなぜですか。しかし、ここでは基本的な一般的なケースを学びたいです。

ベストアンサー1

シェルだけを終了した場合は、bashに関するバグレポートを送信する必要があります。

最新のシェルはインタラクティブシェルのジョブ制御を自動的に有効にするため、

./script1&

独自のプロセスグループIDを使用して新しいタスクを作成します。

evince次を呼び出すと、シェルはプログラムを待ちます。

kill -9 $!

シェルのみがシャットダウンされ、引き続きevince実行されます。

しかし、電話する場合:

kill %1

これにより、を含むすべての操作が終了しますevince

おすすめ記事