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的区别
相关文章推荐
- ASMCMD fails to start on module libnnz10.so, permission denied
- 行为型模式:责任链模式(Chain of Responsibility Pattern)
- CMAKE_GENERATOR_TOOLSET and CMAKE_TOOLCHAIN_FILE
- 解决airserver在Windows下安装失败的问题
- http://elinux.org/Main_Page
- [YARN] 2.2 GB of 2.1 GB virtual memory used. Killing container.
- STL map,vector和pair的混合应用
- FOXMAIL无法响应
- LeetCode 219. Contains Duplicate II
- Customizing AIX Prompt
- 算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)
- tail命令和head命令查询文件指定行数
- 使用UltraISO制作U盘启动盘
- Liunx 下装openoffice 乱码解决__http://wenku.baidu.com/link?url=3uaBXBwPt_ewQSZEV1vnyhaFrB8Pf7Z-VYJDGLnFvUM
- win8配置最新版flashdevelop v2和 sdk4.6+air18 配置系统未能初始化flashplayer等 解决配置方案
- 【Django】 发邮件 email
- git clone操作出现fatal:index-pack failed错误解决方案
- Latex Tools在OSX EI Captain无法编译的问题
- CPaintDC CDC
- Air中File类获取地址的研究