を実行すると、./script.sh &
スクリプトは次のようになります。
#!/bin/bash
echo "hello"
sleep 30
echo "hello again"
sleep 30
touch /root/foo.txt
その後、ps auを使用して "sleep"呼び出しプロセスIDを識別し、Kill -HUPを介して終了しました。その後、プログラムはまだ終了します。子供が「眠りに落ちた」ときに親に通知が送信されますか?
ただし、echoを実行して"hello" && sleep 30 && echo "hello again" && sleep 30 && touch /root/testFILE.txt &
プロセスを繰り返すと、プログラムは完了しません。なぜこれですか?実際に最後の "sleep" の間に接続を切断すると (ssh を介して amazon linux 2 を実行する ec2 インスタンスに ssh を介して接続されているため)、実際にはファイルに "接触" します。
切断したら、sleepコマンドにHUP信号を送信する必要があります(私の考えでは)。これは前の段落と同じ結果を持たなければなりませんが、戻ってくるとファイルはそこにあります。
(注:Kill -HUPを介して最後の「スリープ」中にhup信号を手動で送信すると、ファイルも生成されません...)何が起こっていますか? EC2インスタンスに関連している可能性はありますか?それともUnixオペレーティングシステムでのみ説明できますか?
答え1
スクリプトは関係なくすべてのコマンドを実行します。コマンドラインでは&
notを使用するため、;
各コマンドは前のコマンドが成功した場合にのみ実行されます。スリープ終了が成功しなかった場合、または必要に応じて戻り値が0(成功!)ではなく129(成功ではありません)になります。
ただし、値129は信号番号(HUPは1)に128を加えた値、またはSIGTERM(信号15)を使用する場合は143です。どちらの場合も、129 または 143 はゼロではないため、コマンド文字列の次のコマンドは実行されません。