私はいくつかの読み取り操作を実行するデバイスをマウントしてアンマウントするbashスクリプトを持っています。デバイスが非常に遅いので、スクリプトは完了するまでに約15秒かかっています(マウントは少なくとも5-6秒かかります)。このデバイスをマウントしたままにすると他の問題が発生する可能性があるため、このスクリプトを中断しないようにします。Bashスクリプト:SIGTSTPを正しく処理できません
私は正しくSIGINT(Ctrl + c)を処理できますが、SIGTSTP(Ctrl + z)を処理しようとすると、スクリプトがフリーズします。つまり、信号はトラップされていますが、ハンドラは実行されません。
#!/bin/sh
cleanup()
{
# Don't worry about unmounting yet. Just checking if trap works.
echo "Quitting..." > /dev/tty
exit 0
}
trap 'cleanup' SIGTSTP
...
手動でKILL信号をプロセスに送信する必要があります。なぜこれが起こっているか、私はそれを修正することができますどのようなアイデア?
これは非常に意味があります。だから、スクリプトで実行するすべてのバイナリも^ zを処理しない限り、^ zを適切に処理する方法はありません。そうですか? – Ram
setsidの下でジョブを非同期で実行し、それを待つことができます。例: 'setid cmd 'ではなく' setsid cmd&wait'です。 –
そうそうです。ご協力ありがとうございます!しかし、ちょうど興味がありますが、プロセスは新しいセッションの下で停止したままになりませんか? – Ram