您的位置:首页 > 大数据 > 人工智能

expect中的close,wait,exit,return

2015-09-08 15:13 411 查看
#!/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的区别
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: