《Expect 中 spawn 命令的使用与相关问题处理》
1. 检查 spawn 的错误
之前的示例都假定spawn总是能成功,但实际上并非如此。不过,它通常只在特殊环境或特殊情况下才会失败。下面我们来详细了解如何判断spawn是否成功。
spawn命令通常会返回新生成进程的进程 ID。不过,由于通过spawnID 操作生成的进程更为便捷,所以这个进程 ID 一般没太大用处。不过,在某些情况下,直接使用进程 ID 来终止进程会比进行一系列复杂交互更方便。
set pid [spawn program] # 一段时间后 exec kill $pid进程被终止后,需要调用close和wait来回收进程连接。
系统资源耗尽可能会导致spawn失败。例如,spawn会分配动态内存和逻辑终端接口。这种失败可以使用 Tcl 的catch命令来捕获:
if [catch "spawn program" reason] { send_user "failed to spawn program: $reason\n" exit 1 }即便