後台執行的幾種方法
>php /tmp/test.php & 這種後台執行,如果終端視窗沒了,程式也就停止了。如果有echo這種輸出的話,程式即使是在後台執行的但是輸出還是會輸出到這個中斷視窗上所以還是挺奇怪,建議用》輸出到固定的地方。
jobs 可以檢視當前終端視窗(注意只是當前終端視窗)有多少程式後台執行,如果a終端視窗後台執行了程式,b終端視窗用jobs看不到a視窗後台執行的程式,但是可以用ps-ef檢視
fg %程式號(jobs命令後,中括號裡那個數字) 可以把後台執行的程式放到前台執行
ctrl+c可以中斷前台執行的程式
ctrl+z 可以把前台執行的程式放到後台掛起
bg %程式號(jobs命令後,中括號裡那個數字)可以讓後台掛起的程式開始執行
輸出問題:
eg:sudo kill -9 `ps -elf |grep -v grep|grep $1|awk ''` 1>/dev/null 2>/dev/null
命令的結果可以通過%>的形式來定義輸出
/dev/null 代表空裝置檔案
> 代表重定向到**,例如:echo "123" > /home/123.txt
1 表示stdout標準輸出,系統預設值是1,所以">/dev/null"等同於"1>/dev/null"
2 表示stderr標準錯誤
& 表示等同於的意思,2>&1,表示2的輸出重定向等同於1
這個也可以解釋為什麼我明明加了後台執行,也加了》重定向的符號,但是還是會有內容輸出到終端上?因為有錯誤資訊還是會輸出到終端上來。所以要加2>&1
1>/dev/null 首先表示標準輸出重定向到空裝置檔案,也就是不輸出任何資訊到終端,說白了就是不顯示任何資訊。
2>&1 接著,標準錯誤輸出重定向等同於 標準輸出,因為之前標準輸出已經重定向到了空裝置檔案,所以標準錯誤輸出也重定向到空裝置檔案。
指令碼只使用標準輸入、標準輸出和標準錯誤
shell會自動為我們開啟和關閉0、1、2這三個檔案描述符,我們不需要顯式地開啟或關閉它們。標準輸入是命令的輸入,預設指向鍵盤;標準輸出是命令的輸出,預設指向螢幕;標準錯誤是命令錯誤資訊的輸出,預設指向螢幕。
如果沒有顯式地進行重定向,命令通過檔案描述符0從螢幕讀取輸入,通過檔案描述符1和2將輸出和錯誤資訊輸出到螢幕。但如果我們想從其他檔案(再次強調,i/o裝置在unix/linux中也是檔案)讀取輸入或產生輸出,就需要對0、1、2使用重定向了。其語法如下:
command < filename 把標準輸入重定向到filename檔案中 就是如果程式執行中需要引數輸入的,引數直接從filename這個檔案裡讀
command 0< filename 把標準輸入重定向到filename檔案中
command > filename 把標準輸出重定向到filename檔案中(覆蓋)
command 1> fielname 把標準輸出重定向到filename檔案中(覆蓋)
command >> filename 把標準輸出重定向到filename檔案中(追加)
command 1>> filename 把標準輸出重定向到filename檔案中(追加)
command 2> filename 把標準錯誤重定向到filename檔案中(覆蓋)
command 2>> filename 把標準輸出重定向到filename檔案中(追加)
command > filename 2>&1 把標準輸出和標準錯誤一起重定向到filename檔案中(覆蓋)
command >> filename 2>&1 把標準輸出和標準錯誤一起重定向到filename檔案中(追加)
command < filename >filename2 把標準輸入重定向到filename檔案中,把標準輸出重定向
到filename2檔案中
command 0< filename 1> filename2 把標準輸入重定向到filename檔案中,把標準輸出重定向
到filename2檔案中
重定向的使用有如下規律:
1)標準輸入0、輸出1、錯誤2需要分別重定向,乙個重定向只能改變它們中的乙個。
2)標準輸入0和標準輸出1可以省略。(當其出現重定向符號左側時)
3)檔案描述符在重定向符號左側時直接寫即可,在右側時前面加&。
4)檔案描述符與重定向符號之間不能有空格!
dup2重定向後的恢復
這週是留校的第二週,寫shell分析引數著實難受,更難受的還在後面,由於自己shell的結構比較奇特,在fork之前已經進行了重定向,導致在excv執行程式之後結果無法列印到螢幕上。好生苦惱,好在萬能的google解決了這個問題,因此為大家分享一下。咱們先來看個 吧 include include ...
使用dup,dup2重定向的試驗
想在bash修改版 中得到執行使用者輸入命令後的回顯資料,沒調通。管道中沒有資料,應該是找到的fd不對。bash 執行使用者輸入的命令後,具體命令回顯用的是重定向。重定向用linuxc實現時,用的是dup和dup2.從頭做個試驗,體會一下dup和dup2的效果。本來可以在sshd 中嘗試得到回顯,因...
python urllib2 解決重定向問題
由於urllib2處理重定向不會自動帶上cookie,這個是比較麻煩的,找了幾篇文章,還是這個靠譜,加上去以備萬一。1 以下 是使得urllib2擁有重定向帶上cookie 2 以下 是阻止重定向,並且獲得響應頁面 非重定向之後的頁面 redirection target response.head...