nohupを使用して開始されたプロセスが終了した後に実行されるようにトラップコマンドを設定するにはどうすればよいですか?

nohupを使用して開始されたプロセスが終了した後に実行されるようにトラップコマンドを設定するにはどうすればよいですか?

私はaを使ってシェルスクリプトに渡していますtmpfilemy_exe終了tmpfile後、内容を削除する必要があるためmy_exe使用していますtrap "rm $tmpfile" exit

my_exe端末を閉じるときも閉じることを防ぐ必要があるのでnohup my_exe $tmpfile &。次のように進みます。$tmpfilemy_exe

#!/bin/bash

tmpfile=$(mktemp)
trap "rm $tmpfile" exit

echo "aaa" > $tmpfile

nohup my_exe $tmpfile &

trap実際に終了を待つようにコマンドを設定するにはどうすればよいですかmy_exe

答え1

スクリプトの最後の行はmy_exeバックグラウンドで呼び出されます。これは、呼び出しがmy_exeすぐに成功コードを返すことを意味します。

あなたのスクリプトが知っている限り、my_exeそのスクリプトが呼び出され、正常に作業を完了しました。スクリプトには実行する他のコマンドがないため、スクリプトが終了し、一時ファイル削除トラップがトリガーされます。

トラップは外部コマンドではないため、必要な方法で実行するようにトラップを構成することはできません。スクリプトを実行するシェルの内部機能です。トラップ機能が完了するのを待つには、my_exeスクリプトがmy_exe完了するのを待つ必要があります。

実行中に端末を閉じたいと思ったので、my_exeコールラインから&を削除することをお勧めしますmy_exe。スクリプトはmy_exe一時ファイルの使用が完了するのを待ちます。代わりに&を使用してバックグラウンドでスクリプトを実行してください。

所望の方法で動作するには、いくつかの実験が必要な場合があります。プロセスを終了せずにターミナルウィンドウを閉じることができるか、一時ファイルが正しい時間に削除されることを確認するよりも、呼び出されたスクリプトバージョンで/bin/sleep 15テストすることをお勧めします。my_exe

関連情報