我是個新的 linux/unix 使用者。我該如何在 linux 或類 unix 系統中使用 bash/ksh/tcsh 或者基于 posix 的 shell 來檢視目前正在進行的作業job?在 unix/linux 上怎樣顯示目前作業的狀态?(lctt 譯注:job,也常稱為“任務”)
作業控制是一種能力,可以停止/暫停程序(指令)的執行并按你的要求繼續/恢複它們的執行。這是通過你的作業系統和諸如 bash/ksh 或 posix shell 等 shell 來執行的。
shell 會将目前所執行的作業儲存在一個表中,可以用 jobs 指令來顯示。
<a></a>
在目前 shell 會話中顯示作業的狀态。
其基本文法如下:
<code>jobs</code>
或
<code>jobs jobid</code>
或者
<code>jobs [options] jobid</code>
在開始使用 jobs 指令前,你需要在系統上先啟動多個作業。執行以下指令來啟動作業:
<code>### 啟動 xeyes, calculator, 和 gedit 文本編輯器 ###</code>
<code>xeyes &</code>
<code>gnome-calculator &</code>
<code>gedit fetch-stock-prices.py &</code>
最後,在前台運作 ping 指令:
<code>ping www.cyberciti.biz</code>
按 ctrl-z 鍵來挂起suspend ping 指令的作業。
要在目前 shell 顯示作業的狀态,請輸入:
<code>$ jobs</code>
輸出示例:
<code>[1] 7895 running gpass &</code>
<code>[2] 7906 running gnome-calculator &</code>
<code>[3]- 7910 running gedit fetch-stock-prices.py &</code>
<code>[4]+ 7946 stopped ping cyberciti.biz</code>
要顯示名字以“p”開頭的程序 id 或作業名稱,輸入:
<code>$ jobs -p %p</code>
<code>$ jobs %p</code>
<code>[4]- stopped ping cyberciti.biz</code>
字元 % 是一個指定任務的方法。在這個例子中,你可以使用作業名稱開頭字元串來來暫停它,如 %ping。
通過 jobs 指令的 -l(小寫的 l)選項列出每個作業的詳細資訊,運作:
<code>$ jobs -l</code>
示例輸出:
fig.01: 在 shell 中顯示 jobs 的狀态
首先,啟動一個新的工作如下所示:
<code>$ sleep 100 &</code>
現在,隻顯示自從上次提示過停止或退出之後的作業,輸入:
<code>$ jobs -n</code>
<code>[5]- running sleep 100 &</code>
通過 jobs 指令的 -p 選項僅顯示 pid:
<code>$ jobs -p</code>
<code>7895</code>
<code>7906</code>
<code>7910</code>
<code>7946</code>
<code>7949</code>
通過 jobs 指令的 -r 選項隻顯示正在運作的作業,輸入:
<code>$ jobs -r</code>
<code>[1] running gpass &</code>
<code>[2] running gnome-calculator &</code>
<code>[3]- running gedit fetch-stock-prices.py &</code>
通過 jobs 指令的 -s 選項隻顯示停止工作的作業,輸入:
<code>$ jobs -s</code>
<code>[4]+ stopped ping cyberciti.biz</code>
要繼續執行 ping cyberciti.biz 作業,輸入以下 bg 指令:
<code>$ bg %4</code>
選項
描述
<code>-l</code>
列出程序 id 及其它資訊。
<code>-p</code>
僅列出程序 id。
<code>-n</code>
僅列出自從上次輸出了狀态變化提示(比如顯示有程序退出)後的發生了狀态變化的程序。
<code>-r</code>
僅顯示運作中的作業。
<code>-s</code>
僅顯示停止的作業。
<code>-x</code>
運作指令及其參數,并用新的指令的程序 id 替代所比對的原有作業的程序組 id。
輸入以下 type 指令找出是否 jobs 指令是 shell 的内建指令或是外部指令還是都是:
<code>$ type -a jobs</code>
<code>jobs is a shell builtin</code>
<code>jobs is /usr/bin/jobs</code>
在幾乎所有情況下,你都需要使用 bash/ksh/posix shell 内建的jobs 指令。/usr/bin/jobs 指令不能被用在目前 shell 中。/usr/bin/jobs 指令工作在不同的環境中,并不共享其父 bash/ksh 的 shell 作業。
本
文來自雲栖社群合作夥伴“linux中國”
原文釋出時間為:2013-04-02.