man signal.h は、Solaris 11 に SIGEXIT がないことを示しています。シェル スクリプトでそれをトラップするにはどうすればよいですか? または、SIGEXT をトラップする古い動作をどのようにシミュレートできますか?
2 に答える
3
シェル機能について C API マニュアルを参照するのはなぜですか?
Solaris 11 シェル (少なくとも ksh93、bash、および sh) では、SIGEXIT シグナルを確実にトラップできます。
$ cat /etc/release
Oracle Solaris 11.1 X86
Copyright (c) 1983, 2012, Oracle and/or its affiliates. All rights reserved.
Assembled 19 September 2012
$ cat /tmp/z
#!/bin/ksh
trap "date" exit
sleep 60
echo done
$ /tmp/z
^CThursday, August 29, 2013 10:18:58 PM CEST
$
明確にするために、Unix ではシグナル 0 や SIGEXIT はありません。これは、次の 2 つの方法で使用できる「疑似」信号です。
kill -0 pid
この場合、ターゲットプロセスは何も受信しませんが、送信者は kill の戻り値をチェックすることでプロセスが実際に存在するかどうかを知ることができます。シェルスクリプトにトラップすることにより、スクリプトが終了したときにハンドラーが実行されます。
于 2013-08-29T20:21:12.717 に答える
0
クリーンアップやその他の同様のタスクを実行するには、スクリプトを 2 番目のスクリプトでラップすることができます。この 2 番目のスクリプトは、最初のスクリプトを実行し、終了コードを保存し、クリーンアップを実行して、保存されたコードで終了することができます。
于 2013-08-29T18:43:49.993 に答える