4

ホストに telnet プロセスを生成します。私はコマンドを送信します。見返りを期待します。これはしばらく続きます。しかし、このやり取りの間のどこかで、ホストへの接続が不思議なことに失われ、生成された (現在は停止している) telnet プロセスに何かを「送信」しようとしているときにスクリプトが停止します。spawn id と送信するコマンドを引数として取るプロシージャを書きたいと思います。コマンドを「送信」する前に、スポーン 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 に答える