Cygwin问题,expect-生成id exp64未打开

Cygwin问题,expect-生成id exp64未打开,cygwin,tcl,expect,Cygwin,Tcl,Expect,如果我从cygwin运行TCL/expect脚本,我会遇到一个问题。 当我获得第64次会话时,出现以下错误(调试输出): 脚本工作正常,在到达会话exp64之前一直在执行任务。我还尝试在Ubuntu上运行脚本,而不是在Cygwin上运行。它工作正常,没有任何错误 我在使用其他脚本时也遇到了这个问题。 我已经尝试重新安装Cygwin,同样的问题出现了 你知道会是什么吗 同时: #!/usr/bin/expect set i 1 while {1} { spawn ssh username

如果我从cygwin运行TCL/expect脚本,我会遇到一个问题。 当我获得第64次会话时,出现以下错误(调试输出):

脚本工作正常,在到达会话exp64之前一直在执行任务。我还尝试在Ubuntu上运行脚本,而不是在Cygwin上运行。它工作正常,没有任何错误

我在使用其他脚本时也遇到了这个问题。 我已经尝试重新安装Cygwin,同样的问题出现了

你知道会是什么吗


同时:

#!/usr/bin/expect
set i 1
while {1} {
    spawn ssh username@1.1.1.1
    set sid $spawn_id
    expect "assword:"
    send "Start123\r"
    expect "Router"
    send "show ip int brief\r"
    while {1} {
        expect {
            "Router" {send "exit\r"}
            eof {break}
        }
    }
    puts "*** Loop is running: $i, spawn_id is: $sid ***"
    incr i
}
只需编写一个简单的脚本,将其发送到Cisco路由器,发送命令,然后退出。它以无止境的循环方式完成工作,因此我可以同时记录$spawn_id:

#!/usr/bin/expect
set i 1
while {1} {
    spawn ssh username@1.1.1.1
    set sid $spawn_id
    expect "assword:"
    send "Start123\r"
    expect "Router"
    send "show ip int brief\r"
    while {1} {
        expect {
            "Router" {send "exit\r"}
            eof {break}
        }
    }
    puts "*** Loop is running: $i, spawn_id is: $sid ***"
    incr i
}
我也遇到了同样的错误:

*** Loop is running: 60, spawn_id is: exp63 ***
spawn ssh username@1.1.1.1
send: spawn id exp64 not open

可以维护的同时expect会话的数量有限制。该限制因操作系统而异,并且(至少在某些平台上)是全局限制,而不是进程本地限制。不过,由于您使用的是Windows,所以您可能也会遇到每个进程的限制;我不完全确定(尽管64听起来和其中一个一模一样)。在任何情况下,听起来都像是资源枯竭


您是否记得在完成与特定主机的交互后关闭?如果您在这个过程中有很多旧的expect会话,那么您将泄漏相当宝贵的资源池。

可以维护的同时expect会话的数量是有限制的。该限制因操作系统而异,并且(至少在某些平台上)是全局限制,而不是进程本地限制。不过,由于您使用的是Windows,所以您可能也会遇到每个进程的限制;我不完全确定(尽管64听起来和其中一个一模一样)。在任何情况下,听起来都像是资源枯竭


您是否记得在完成与特定主机的交互后关闭?如果您在这个过程中有很多旧的expect会话,那么您将泄漏一个非常宝贵的资源池。

问题是您没有等待退出的ssh过程。如果没有
等待
,退出的ssh进程将显示为
失效
,它仍在使用
PID
,可能还有一些
FD
。您可以这样尝试:

    while {1} {
        expect {
            "Router" {send "exit\r"}
->          eof { wait -nowait; break }
        }
    }
    puts "*** Loop is running: $i, spawn_id is: $sid ***"
    incr i


问题是您没有等待退出的ssh进程。如果没有
等待
,退出的ssh进程将显示为
失效
,它仍在使用
PID
,可能还有一些
FD
。您可以这样尝试:

    while {1} {
        expect {
            "Router" {send "exit\r"}
->          eof { wait -nowait; break }
        }
    }
    puts "*** Loop is running: $i, spawn_id is: $sid ***"
    incr i


非常感谢。我使用了“close-I$sid;wait”命令来解决这个问题。现在,打开的SSH会话的数量不再增加,但是我也遇到了同样的问题。不知何故,后台仍然有打开的会话吗?谢谢!我使用了“close-I$sid;wait”命令来解决这个问题。现在,打开的SSH会话的数量不再增加,但是我也遇到了同样的问题。不知何故,后台仍有打开的会话?介意粘贴代码吗?只是尝试在cygwin(windows 7上)中生成(
spawn bash;send exit\r;expect eof
)10000个bash进程。没有错误。谢谢您的检查。我认为这与windows7上的ssh有关。我尝试过很多方法,使用close命令,使用expecteof完全退出,但没有一种方法有效。但是,我没有打开多个SSH连接。是否粘贴代码?只是尝试在cygwin(windows 7上)中生成(
spawn bash;send exit\r;expect eof
)10000个bash进程。没有错误。谢谢您的检查。我认为这与windows7上的ssh有关。我尝试过很多方法,使用close命令,使用expecteof完全退出,但没有一种方法有效。但是我没有打开多个SSH连接。万分感谢,你解决了我的问题!!!我已经试过等待了,但是放错地方了。我现在明白错了。万分感谢,你解决了我的问题!!!我已经试过等待了,但是放错地方了。我现在明白了。