在linux中,利用shell的作業控制是比較常用的操作,在這一節中我們將**作業控制相關的操作。為了方便我們檢視區分不同的進行,我們編寫如下程式,其功能是每間隔2秒輸出一次自己的編號。
1/*2** test puting a running program into backgound3*/
4 #include 5 #include 6
7int main(int argc, char*ar**)
8
1314
while (1
)
18 }
1 將程序放入後台
在shell程式設計環境中,可以使用組合鍵ctrl+z將前台正在執行的程式放入後台,但是程式會暫停執行。示例如下:
xiaomanon@xiaomanon:~/documents/shell$ ./bgtest 2000task [
2000] wait 2
seconds.
^z[1]+ stopped./bgtest 2000
xiaomanon@xiaomanon:~/documents/shell$ ./bgtest 2001
task [
2001] wait 2
seconds.
^z[2]+ stopped./bgtest 2001
xiaomanon@xiaomanon:~/documents/shell$ ./bgtest 2002
task [
2002] wait 2
seconds.
^z[3]+ stopped./bgtest 2002
如上所示,我們執行了3個程序,並且給每個程序指定乙個不同的編號,如2000、 2001、 2002,藉此我們可以知道當前哪乙個程序在執行。當我們按下ctrl+z組合鍵後,程序會被放到後台並且暫停,同時我們可以看到輸出了一行字串,類似於「[1]+ stopped./bgtest 2000」,要注意中括號中的數字就是系統自動生成的後台任務編號。
2 檢視後台程式
在前面,我們已經將3個程序放到後台了,但是我們如何檢視呢?可以使用jobs命令,用法如下:
xiaomanon@xiaomanon:~/documents/shell$ jobs[1] stopped ./bgtest 2000
[2]- stopped ./bgtest 2001
[3]+ stopped ./bgtest 2002
該命令輸出有3列,第一列為任務編號,第二列為任務的狀態,第三列為程式名。我們可以看到,所有的程序被放入到後台以後全部都暫停了。
3 後台執行程式
如何讓後台被暫停的程式重新執行呢?我們可以使用命令「bg 任務編號」來讓程式在後台執行,如下所示就是讓任務編號為1的程式重新執行。
xiaomanon@xiaomanon:~/documents/shell$bg 1[1] ./bgtest 2000 &xiaomanon@xiaomanon:~/documents/shell$ task [2000] wait 2
seconds.
task [
2000] wait 2
seconds.
jotask [
2000] wait 2
seconds.bs[
1] running ./bgtest 2000 &[
2]- stopped ./bgtest 2001
[3]+ stopped ./bgtest 2002
我們可以看到,程式會繼續輸出字串,但是,真個並不影響我們接著執行其他命令,比如我們這是繼續使用jobs命令,可以檢視到後台執行的程式的狀態,也看到任務1的狀態改為了「running」。
4 讓程式前台執行
當然,我們也可以讓被放到後台的程式重新回到前台執行,可以執行「fg 任務編號」,如下所示:
xiaomanon@xiaomanon:~/documents/shell$ fg 3./bgtest 2002
task [
2002] wait 2
seconds.
task [
2002] wait 2
seconds.
task [
2002] wait 2
seconds.
jobtask [
2002] wait 2
seconds.
stask [
2002] wait 2
seconds.
jostask [
2002] wait 2
seconds.
task [
2002] wait 2
seconds.
task [
2002] wait 2
seconds.^z[
3]+ stopped ./bgtest 2002
可以看到,程式在前台執行時,如果我們輸入其他命令是不能響應的,整個前台被當前執行的任務3獨佔。我們必須將其重新放入到後台才能夠輸入其他命令。
5 殺死前台程序
殺死前台程序比較容易,我們可以直接使用組合鍵ctrl+c終止前台執行的程序。
在我們使用命令「ps -u」檢視當前使用者程序時,可以發現任務3已經被殺死了。
6 殺死後台程序
我們知道,可以利用「kill 程序號」的方式來殺死正在執行的程序,但是對於暫停的程序能不能起作用呢?我們做了如下嘗試,結果發現任務2並沒有被殺死。
由此,我們只能夠先使用fg命令將程序放到前台執行,然後再使用ctrl+c來殺死該前台程序。
Linux 作業控制
參考文獻 作業控制是bsd在1980年前後增加的乙個特性。它允許在乙個終端上啟動多個作業 程序組 它支援控制哪乙個作業可以訪問終端,以及哪些作業可以在後台執行。作業可以看做是shell管理的程序 主要有三點 支援作業控制的shell 核心中的終端驅動程式必須支援作業控制 核心必須提供對某些作業控制訊...
Linux的作業控制
作業 jobs,在命令列執行或者是通過系統啟動時執行的乙個程式,但要注意的是,執行乙個指令碼的時候,可能會啟動多個程序,所以作業和程序不是一一對應的。作業包括乙個或多個程序,它主要是完成一系列複雜的任務或者乙個完整任務的一組程式或程序。前台作業 通過終端啟動,且啟動後一直佔據終端 後台作業 可以通過...
Linux中作業控制命令
開門見山,最近.net勸退師要在linux上寫些長時間執行的指令碼,獲取azure blobstorage儲存的資料。記錄一下linux中後台執行作業的命令。作業 job 是shell管理的程序 每個job都有乙個關聯的pid 每個作業會被分配乙個線性job id。有兩種形式的作業 foregrou...