我们可以在Tcl中处理单个proc中的所有信号

时间:2013-10-18 07:44:22

标签: signals tcl expect

我正在研究tcl代码。我需要在tcl中处理单个函数中的所有可能信号。 这样做有没有简单的方法。

例如:

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

像这样我想单独将所有信号注册到此功能。

1 个答案:

答案 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),但在它们上设置陷阱不会有什么坏处。实际上,您可能希望使用显式列表,以便不会捕获任何您不期望的内容。例如,捕获任何导致核心转储默认创建的信号几乎肯定是错误的;当那些已经不太可能恢复时,往往会抛出那些。