0

私はtclコードに取り組んでいます。Tcl の 1 つの関数で考えられるすべてのシグナルを処理する必要があります。それを行う簡単な方法はありますか?

例えば:

signal trap SIGINT mySIGFunc;  # This Handles signal only from SIGINT

このように、すべての信号をこの関数だけに登録したいと思います。

4

1 に答える 1

1

予想どおり、これを行うことができます (トラップするシグナルは、実際にはシグナル識別子のリストであり、数値または名前を付けることができるため):

# Make a signal ID list in $sigs
set sigs {}
for {set i 1} {$i <= 31} {incr i} {lappend sigs $i}

# Set the trap callback for each of the signals
trap mySIGFunc $sigs

OK、これらのシグナルのいくつかは実際にはトラップできません (たとえば、SIGKILL=9、SIGSTOP=17) が、それらにトラップを設定しても害はありません。実際、予期しないものをトラップしないように、明示的なリストを使用したい場合があります。たとえば、デフォルトでコア ダンプが作成される原因となるシグナルをトラップするのは、ほぼ間違いなく間違いです。それらは、回復がすでに可能である可能性が低い場合にスローされる傾向があります。

于 2013-10-18T08:16:19.377 に答える