expect中的close,wait,exit,return

#!/usr/bin/expect -f

set ipaddr "localhost"

set passwd "iforgot"

spawn ssh root@$ipaddr              #spawn   意思是执行命令,expect内命令,shell中不存在

expect {

"yes/no" { send "yes\r"; exp_continue}

"password:" { send "$passwd\r" }

}

expect "]# "

send "touch a.txt\r"                       #意思为发送命令

send "exit\r"

expect eof

exit

在上面的脚本中第4句的spawn命令实际上是运行了ssh(一个进程,并且这个进程是spawn的子进程,即spawn是一个父进程),并且有一个默认的全局变量spawn_id绑定到了ssh。


spawn ssh root@$ipaddr


而close是用来关闭与spawn_id对应的子进程的连接,并且将子进程杀死。并且close在关闭连接后会返回一个数,系统会获得这个数以及子进程是怎么死的相关信息。

但是如果close后面没有wait的话,子进程虽然死了,但是依然存在进程列表中,此时这样的子进程叫做僵尸进程。僵尸进程会占用进程号,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程

所以wait说的专业一点是监视一个进程的终止。简单点就是负责给子进程收尸的。

相关英文文章

相关中文文章


另外close,wait可以隐含地产生。expect和interact都能检测到当前程序的退出,并隐含地执行一个close,但是wait只会在父进程退出时(即脚本退出时)隐含产生。所以对于只有一个子进程的脚本在exit后可以不写wait。


exit退出一个进程,exit后面可以跟一个句柄,用来指定要退出的进程(exit -onexit $handler);也可以不跟,那就是默认退出当前进程(一般会是脚本)。并且exit会在脚本的末尾被隐含地产生。


return 从一个过程返回。


问题:close 与exit的区别


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值