轉自:http://os.51cto.com/art/201003/187435.htm
Linux後台運行命令前面介紹了cron和crontab、at這兩個命令,後面這裡繼續介紹&,使用這個命令將不會占據終端,將進程放入後台運行。還是要講Linux後台運行命令加以比較學習,結合舉例印象更深。
&當在前台運行某個作業時,終端被該作業占據;而在後台運行作業時,它不會占據終端。可以使用&命令把作業放到後台執行。
該命令的一般形式為:
命令&
在後台運行作業時要當心:需要用戶交互的命令不要放在後台執行,因為這樣你的機器就會在那裡傻等。
不過,作業在後台運行一樣會將結果輸出到屏幕上,干擾你的工作。如果放在後台運行的作業會產生大量的輸出,最好使用下面的方法把它的輸出重定向到某個文件中:
command >out.file
2>&1 &
在上面的例子中,2>&1表示所有的標准輸出和錯誤輸出都將被重定向到一個叫做out.file
的文件中。
當你成功地提交進程以後,就會顯示出一個進程號,可以用它來監控該進程,或殺死它。
例一:
查找名為“httpd.conf”的文件,並把所有標准輸出和錯誤輸出重定向到f i n d . d t的文件中:
# find /etc/httpd/ -name "httpd.conf" -print
>find.dt 2>&1
&
[2] 7832
[1]
Done
find /etc/ -name "httpd.conf" -print >find.dt
2>&1 &
成功提交該命令之後,系統給出了它的進程號7832。
# cat find.dt
/etc/httpd/conf/httpd.conf
[2]+
Done
find /etc/httpd/ -name "httpd.conf" -print >find.dt
2>&1 &
查看find.dt,可以看到執行結果
例二:
在後台執行腳本,如:有一個叫psl的腳本
$ps psl &
[7878]
用ps命令查看進程用提交命令時所得到的進程號來監控它的運行。用p s命令和g r e p命令列出這個進程:
# ps -x |grep 7832
7868 pts/0
S
0:00 grep 7832
如果系統不支持ps x命令,可以用:
# ps -ef |grep 7832
root
7866 7790 0 23:40
pts/0
00:00:00 grep 7832
在用p s命令列出進程時,它無法確定該進程是運行在前台還是後台。
殺死後台進程殺死後台進程可以使用k i l l命令。當一個進程被放到後台運行時, s h e l
l會給出一個進程號,我們可以根據這個進程號,用k i l l命令殺死該進程。該命令的基本形式為:
kill -signal [process_number]
現在暫且不要考慮其中的各種不同信號。
在殺進程的時候,執行下面的命令(你的進程號可能會不同)並按回車鍵。系統將會給出相應的信息告訴用戶進程已經被殺死。
$kill 7832
如果系統沒有給出任何信息,告訴你進程已經被殺死,那麼不妨等一會兒,也許系統正在殺該進程,如果還沒有回應,就再執行另外一個k i
l l命令,這次帶上一個信號選項:
$kill - 9 7868
如果用上述方法提交了一個後台進程,那麼在退出時該進程將會被終止。下一講還會介紹另一個Linux後台運行命令n o h u
p。