如何检查spawn_id是否还活着? (TCL)

时间:2013-04-15 09:42:36

标签: tcl expect

我将一个telnet进程生成到主机。我发送命令,期待一些事情 作为回报。这种情况持续了一段时间。但介于两者之间 互动,与主人的联系神秘地消失了 脚本在尝试"发送"时死亡生成的东西(现在死了) telnet进程。 我想编写一个带有spawn id和命令的过程 作为参数发送。我想检查spawn id是否存在 (在我之前,程序和主机之间的连接存在) "发送"命令。否则,我想退出。 像这样:

proc Send {cmd sid} {
if { $sid is not dead yet } { ;## don't know how to do this
part
send -i $sid "$cmd\r"
} else {
puts "channel id: $sid does not exist anymore. Exiting"
exit
}
}

2 个答案:

答案 0 :(得分:2)

不是检查生成的进程是否仍然存在,而是catch发送到死进程时send引发的错误:

proc Send {cmd sid} {
    if {[catch {send -i $sid "$cmd\r"} err]} {
        puts "error sending to $sid: $err"
        exit
    }
}

答案 1 :(得分:1)

之前我遇到过这个问题并使用Mac / Linux ps命令来执行此操作:

if {[catch {exec ps $pid} std_out] == 0} { 
    puts "Alive"
} else {
    puts "It's dead, Jim"
}

如果您使用的是Windows,我听说tlist.exe命令执行类似操作,但我没有Windows机器来测试它。