应用场景:自制服务器,实现一些简单功能。用expect调用telnet作为客户端连接服务器,然后退出expect,发现telnet进程仍然存在,尝试在脚本中
无法成功,没有wait时,子进程仍然存在,有wait时,expect挂起在那里。使用
也无法让telnet子进程退出。Expect中的close只是实现了断开功能,但是并不能实现关闭子进程的功能。通常的假设是由于子进程检测到stdin的断开后能够自行了结,但是telnet显示没有实现这样的功能。
于是尝试
还是无法杀死了进程,它还是好好地在那儿。通过打印,发现spawn_id并不是真正的进程ID,它只在expect内部有效。在网上找了一圈,发现通过下面的方法可以
- set tid [exp_id]
-
exec kill -9 $tid
能够杀死子进程,只是不知道为什么下面的代码不行
- exec kill -9 [ exec ps | grep 'telnet' | awk '{print $1}' ]
其实,出现这样的问题,是因为telnet将所有的输入都改送给了服务器,如果服务器能够检测到输入中的eof,然后选择关闭子进程,子进程应该能够退出,而wait也能够返回。最后这段是我的猜想,还要通过实验验证。
阅读(4889) | 评论(0) | 转发(0) |