1. 程式人生 > >expect中的close,wait,exit,return

expect中的close,wait,exit,return

#!/usr/bin/expect -f

set ipaddr "localhost"

set passwd "iforgot"

spawn ssh [email protected]$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 [email protected]$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的區別

相關推薦

多線程sleep和wait的區別以及多線程的實現方式及原因定時器--Timer

守護 驗證 取消 技術 方法 代碼 安全 接口 art 1. Java中sleep和wait的區別 ① 這兩個方法來自不同的類分別是,sleep來自Thread類,和wait來自Object類。 sleep是Thread的靜態類方法,誰調用的誰去睡覺,即使在a線程裏調用b

Linux下程序相關:fork()wait()exec()

1採用命令列操作時,所建立程序的pid編號、程序執行、撤銷過程; 為實現此部分要求,我們編寫一小段程式。它的設計想法是,接收使用者的輸入,直到得到我們需要的輸入,才退出。當我們完成程式程式碼編寫,併成功編譯,執行這段可執行程式時,就建立了一個程序。程序建立後,可以通過ps命

expectclosewaitexitreturn

#!/usr/bin/expect -f set ipaddr "localhost" set passwd "iforgot" spawn ssh [email protected]

容易忽略的expect指令碼問題暗藏的殭屍程序wait命令不要漏掉

問題描述 前幾天有個小需求,用到expect指令碼去迴圈的傳送一些資料,主要問題程式碼如下: #! /usr/bin/expect while {true} { set timeout 60 spawn telnet ip port expect "]'."; send "******

Java 內部類多執行緒Synchronized與wait,notify的使用

工作內容: 1.成員內部類    與成員方法,屬性的訪問許可權一致 2.靜態內部類    修飾符 stactic 類名{...} 3.匿名內部類    new 類名()/介面名(重寫介面方法) 4.區域性內部類    程式碼塊中 5.執行緒Thread wait,noti

threadsleep和wait方法的區別以及lock和synchronized的區別

最近在專案中設計業務請求邏輯這一塊,運用到了thread的一些知識,所以就又去特定的研究了一下! 首先 sleep和wait的區別: 1、我們通過檢視原始碼得知,sleep是Threa的靜態方法,而wait方法是Object的成員方法; 2、sleep沒有synchnori

java學習筆記——java對象的創建初始化引用的解析

初始 學習筆記 style article 學習 base 表達 如果 bsp 如果有一個A類。 1、例如以下表達式: A a1 = new A(); 那麽A是類,a1是引用。new A()是對象。僅僅是a1這個引用指向了new A()這個對象。 2、又如: A

數組出現最多的數以及接口 Map.Entry<K,V>

int try tools pub length rem value contains span 1 package test.tools; 2 3 import java.util.Collection; 4 import java.util.Collecti

Android 當打開“開發人員模式”的“不保留活動”後程序應當怎麽保持正常執行

京東 java 天才 以及 click get message 查看源 create Android 當打開“開發人員模式”中的“不保留活動”後,程序應當怎麽保持正常執行咧。。? 在這幾天,我一直在糾結這個問題。從發現,程序出現這個問題,是由於“開發人員模式”中的“不保

notifywaitsynchronized實現線程間通知

java take 計數器 釋放 com 測試結果 con 最大 runnable wait阻塞線程釋放鎖;notify使wait所在的線程被喚醒在次獲得鎖,並執行,但要等到notify所在的線程代碼全部執行後! 示例代碼如下: package com.vhbi.serv

在am定義消息集束並在CO驗證之後拋出異常。

void 按鈕 span lua throws ansi log oaf ext.get 需求:在頁面上點某個按鈕的時候,需要收集所有異常並拋出。 -------------------------------------------方式1:參考 EBS OAF開發中的錯誤

音頻采樣位數采樣率比特率的名詞解釋(轉)

工程 性能 dvd 工作室 轉化 術語 意思 普通 時間間隔 采樣位數: 采樣位數可以理解為采集卡處理聲音的解析度。這個數值越大,解析度就越高,錄制和回放的聲音就越真實。我們首先要知道:電腦中的聲音文件是用數字0和1來表示的。所以在電腦上錄音的本質就是把模擬聲音信號轉換成

關於Jqueryradio的屬性設置是attr,還是prop問題

border b- load size 基本 lis property 然而 javascrip   自己做的一個小的項目員工項目管理中,由於用到Ajax,所有用了jquery,而在人管理中的,人的性別設置單選radio,默認為男的,源代碼如下 <input typ

PHP在foreach對$value賦值無效應該用 ‘鍵’ 或者 &$value的形式

image blank key warn 運行 clas 應該 發現 建議 首先我們看下這段代碼: foreach ($data as$value) { $value[‘name‘] = ‘Hehe‘; } $data中原始的數據為: array(

linq日期格式轉換或者比較程序報錯說不支持方法的解決辦法

格式 var lec fun edi nbsp diff sql 方法 public void TestMethod1(){using (var _context = new hotelEntities()){var rq = DateTime.Now.Date;var q

sql server的全局變量常用的沒有多少...以後看看就行

detail 技術分享 服務 @* version 變量 名稱 tail identity 全局變量格式: @@***   這些變量有系統維護,不需要我們自己定義,一般都是用來查看信息。 在存儲過程中 用得最多的 @@error,判斷有沒有錯誤信息。 一、@@versio

C++ string的幾個小陷阱你掉進過嗎?

stl 試題 賦值 clu ror ati world mod iostream C++開發的項目難免會用到STL的string。使用管理都比char數組(指針)方便的多。但在得心應手的使用過程中也要警惕幾個小陷阱。避免我們項目出bug卻遲遲找不到原因。1. 結構體中的

在pfsense設置多WAN後網銀無法登陸的解決!

pfsense 多wan 網銀 無法訪問在pfsense中設置多WAN後,網銀登陸一般會失效。出現這個問題原因大多是網銀的安全機制問題 ,銀行網站訪問不允許登陸用戶的IP地址短時間發生變化。解決辦法是指定網銀訪問的443端口流量走某一個固定的網關。下面以pfsense2.34的設置為例:設置好的規則如下:20

php classpublic,private,protected的區別以及實例

ons report acc per cnblogs 自己 context php undefined 一,public,private,protected的區別 public:權限是最大的,可以內部調用,實例調用等。 protected: 受保護類型,用於本類和繼承

sqlserver數據庫 表字段值有空格如何去除空格(例如char (5) 存入數據不足5位時sqlserver會自動補空格)

ltrim blog class 有時 找到 logs head 字段 div 普通的空格 前後的空格,使用LTrim和RTrim即可,例如:LTrim(RTrim(Name)) 中間的空格,使用replace函數替換,例如:Replace(Name,‘ ‘,‘‘)