我正在研究 tcl 代码。我需要在 tcl 的单个函数中处理所有可能的信号。有什么简单的方法可以做到这一点。
例如:
signal trap SIGINT mySIGFunc; # This Handles signal only from SIGINT
像这样我想将所有信号单独注册到这个函数。
在期望中,您可以这样做(因为要捕获的信号实际上是一个信号标识符列表,可以是数字或命名):
# 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
好的,其中一些信号实际上是不可捕获的(例如,SIGKILL=9,SIGSTOP=17),但在它们上设置陷阱不会有什么坏处。实际上,您可能想要使用显式列表,这样您就不会捕获任何您不期望的东西。例如,捕获任何导致默认创建核心转储的信号几乎肯定是错误的。当恢复已经不太可能时,这些往往会被抛出。