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