4

我向主机生成了一个 telnet 进程。我发送一个命令,期待一些回报。这会持续一段时间。但是在这种交互之间的某个地方,与主机的连接神秘地丢失了,我的脚本在试图“发送”一些东西到产生的(现在已经死的)telnet 进程时死了。我想编写一个程序,它将生成 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
}
}
4

2 回答 2

2

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

proc Send {cmd sid} {
    if {[catch {send -i $sid "$cmd\r"} err]} {
        puts "error sending to $sid: $err"
        exit
    }
}
于 2013-04-15T16:43:28.627 回答
1

我之前遇到过这个问题并使用 Mac/Linuxps命令来做到这一点:

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

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

于 2013-04-15T16:25:54.817 回答