gpt4 book ai didi

tcl - 我怎样才能在 tcl 中发送 ctrl + c

转载 作者:行者123 更新时间:2023-12-03 09:02:51 34 4
gpt4 key购买 nike

有没有办法可以向 tcl 程序发送 Ctrl+C 信号?

我有一个 tcl 代码,其中当我执行它时,它应该在内部通过 Ctrl+C 信号并打印类似的内容:

将“sent ctrl+c”放入同一文件中。

proc abc {                                 

# Want to sent ctrl + c"
Here I want the command for ctrl+c
puts " sent ctrl+c"
}

最佳答案

如果您将信号发送到 Expect 控制下的程序,您将执行以下操作:

send "\003"

这实际上是当您执行 Ctrl+C 时键盘立即生成的字符;它被终端驱动程序转换成信号。

否则,您需要使用 TclX 包(或 Expect,但只有在需要其全部功能时才应该使用它),它提供 kill 命令:

package require Tclx

kill SIGINT $theProcessID
# You could also use INT or 15 to specify the signal to send.
# You can provide a list of PIDs instead of just one too.

知道要发送到哪个进程 ID 是在创建进程时跟踪事物的问题。如果您不给它任何参数,则当前进程的 PID 将由 pid 命令返回。 exec ... &为其创建的后台管道中的所有(已知)进程返回所创建的子进程的进程 ID。对于使用 open |... 创建的管道,请将管道的 channel 句柄传递给 pid 命令以获取子进程 ID。

set pipeline [open |[list program1 ... | program2 ... | program3 ...] "r+"]
puts $pipeline "here is some input"
set outputLine [gets $pipeline]

kill SIGINT [pid $pipeline]

# This close *should* probably produce errors; you've killed the subprocesses after all
catch {close $pipeline}

如果您要处理中断信号,请使用 TclX 中的signal 命令来执行此操作:

package require Tclx

signal error SIGINT; # Generate a normal Tcl error on signal
signal trap SIGINT {; # Custom signal handler
puts "SIGNALLED!"
exit
}
signal default SIGINT; # Restore default behaviour

如果您使用信号错误SIGINT,生成的错误将包含此消息“SIGINT signal returned”和此错误代码“POSIX SIG SIGINT” >”。这很容易测试(特别是使用 Tcl 8.6 的 try … trap … 命令)。

关于tcl - 我怎样才能在 tcl 中发送 ctrl + c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49095059/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com