如何退出TCL进程,而不退出在该进程内运行的进程
在下面的程序中,我想在第2个进程中捕获数据包,而ping在第1个进程中运行。现在如果我执行这个程序,proc正在运行ping并退出它。有没有解决这个问题的办法 我的TCL代码:如何退出TCL进程,而不退出在该进程内运行的进程,tcl,expect,Tcl,Expect,在下面的程序中,我想在第2个进程中捕获数据包,而ping在第1个进程中运行。现在如果我执行这个程序,proc正在运行ping并退出它。有没有解决这个问题的办法 我的TCL代码: proc connect {} { global spawn_id spawn telnet $1.1.1.1 expect "*ogin:" send "admin\r" expect "*word:" send "test\r" expect "*>"
proc connect {} {
global spawn_id
spawn telnet $1.1.1.1
expect "*ogin:"
send "admin\r"
expect "*word:"
send "test\r"
expect "*>"
send "ping 30.1.1.2\r" ; # Ping here
expect "*#"
}
proc pktcap {} {
spawn telnet $2.2.2.2
expect "*ogin:"
send "admin\r"
expect "*word:"
send "test\r"
expect "*>"
send "enable\r"
expect "*#"
send "service pktcap on interface vlan 2\r" ; # capture here, see the ICMP packets
expect "*#"
set data $expect_out(buffer)
}
使用
open
命令的“管道”语法。这样:open“| ping 30.1.1.2”r
。唯一(次要)的问题是,从open
命令返回的文件描述符需要由您关闭-它不会在进程完成时自动关闭。这里有更多示例:完全未测试:尝试在后台启动ping:发送“ping 30.1.1.2&\r”
与expect的异步操作expect\u background
可能是相关的,但代码不能像那样直线编写。我不知道expect和8.6的协同程序是否能很好地协同工作……但如果不能,我也不会感到惊讶。嗨,格伦,谢谢你的评论。对发送“ping 30.1.1.2&\r”在其linux计算机上有效。我正在使用思科路由器,它不支持和功能。嗨,多纳尔,非常感谢你的评论。希望你的背景在没有proc的情况下工作得很好。你好,Googie,谢谢你的回答。如果我使用open“| ping 10.1.1.2\r”,是的,ping命令正在后台运行。但一旦ping完成,数据包捕获就开始了。我想在ping运行时运行pktcap(以捕获那些ICMP数据包)。如果你有什么想法,请告诉我。我真的不理解你的问题。您说ping已经在后台运行(使用“管道打开”),那么是什么阻止您在“ping管道”中打开后立即运行pktcap呢?我想同时运行ping和pktcap。现在,ping完成后,只有pktcap启动。pktcap运行时是否可以指定ping应在后台连续运行?当您执行open“| ping 30.1.1.2”r
时,它会在后台连续运行,对吗?因此,您可以立即启动将同时运行的pktcap
。否,ping没有持续运行。它在进程退出时也存在。当我在没有proc的情况下运行相同的脚本时,其工作状态良好,如下所示: