Linux工作管理 job control

2021-07-10 22:10:41 字數 2399 閱讀 3514

當使用者只有乙個bash環境,而又想同時幹多樣事情,那麼就可以用工作管理機制。值得注意的是,放進後台的工作不能夠和使用者有互動,例如vim是不可能在後台自動執行的。

#tar -zpcf /tmp/etc.tar.gz /etc &

[1] 8000 <=== [job number] pid

在命令後面新增 & 符號,命令就會在後台執行。另外,因為命令的輸出並沒有被重定向(如 stdout ,stderr),所以有輸出的話還是會輸出在螢幕,可以通過輸出重定向解決(>&)。

通過job命令檢視命令執行的情況:

jobs [-lrs]

-l 列出job number, 命令串外,還包括pid

-r 僅列出後台run的工作

-s 僅列出在後台stop的工作

#jobs -l

[2]  5467 已完成               tar -zpcf /tmp/etc.tar.gz /etc

發現,已經完成了,在次檢視時完成資訊不在列出。

如正在用vim編輯,按下[ctrl]+z,那麼將在後台以stop狀態存在。

root@jammg:/etc# jobs -l

[1] 4747 停止 find / -name a

[2]- 6073 停止 vim a

[3]+ 6086 停止 vim b

上面的+代表最後放進後台的工作,-則代表倒數第二個。

fg、bg分別是將工作在前台、後台執行,用法:

#fg %jobnumber

#bg %jobnumber

以上面為例:

root@jammg:/etc# fg %2       // 再按下ctrl + z

vim a

[2]+ 已停止 vim a

root@jammg:/etc# jobs -l

[1] 4747 停止 find / -name a

[2]+ 6073 停止 vim a

[3]- 6086 停止 vim b

此時2變成+了,

可以通過"fg -"命令執行-號的哪個工作。

root@jammg:/etc# jobs;bg %3 ; jobs

[1] 已停止 find / -name a

[2]+ 已停止 vim a

[3]- 已停止 vim b

[3]- vim b &

[1]- 已停止 find / -name a

[2]+ 已停止 vim a

[3] 執行中 vim b &

發現,通過bg排程3工作後,由-變為「放進後台的時間」再向前一步了,效果和fg相反。

工作管理(job control) 存在的問題是,如果我遠端登陸主機,並以工作管理機制後台執行,那麼遠端斷開連線時,工作也將停止,所以這也就是工作管理所謂的「後台」,它指的是在此工作模式下避免ctrl+c中斷工作,工作依然和終端機有關,和系統後台有很大區別。

其實像at,cron可以解決這個問題!

以下通過nohup命令可以解決這個問題,它可以讓你離線或登出了遠端系統後,還能讓工作繼續進行。

#nohup [命令與引數] [&]

&意義和工作管理一致,

注意,nohup不支援bash內建命令,我們可以新建乙個shell指令碼,將要執行的命令寫進去,然後用nohup命令執行shell指令碼。

利用kill -signal %jobnumber也可直接傳遞signal給相應程序。

在這裡會涉及程序,程序組,會話,控制終端,shell的概念。

那麼,nohup比at命令不同於**呢?

當控制終端被關閉時,擁有該終端的回話會向所有屬於該回話的程序傳送sighup、sigterm和sigquit訊號,所以即使at以「後台」方式執行,它依然會停止工作,因為它始終是屬於這個會話;而nohup就是根據這個特性,在每個屬於該會話的程序安插了忽略上述訊號的**,所以能做到終端關閉而程序繼續執行。

當然了,此時程序再進行i/o是會發生錯誤的,可以通過ioctl函式獲取控制終端。

另外,還有一種解決方法,那就是daemon(守護程序)。

linux工作管理

jobs 檢視工作中的程式。ls 命令後加 表示將命令執行加入後台 建議 後台執行持續執行的程式 不能後台執行互動程式 執行 ctrl z 放入後台 不執行 ctrl c fg 工作號 重新啟動後台停止的程式 後台執行程式執行完回自動彈出 bg 工作號 恢復後台執行 ctrl 大部分終端後台程式繫結...

linux工作管理

指的是在單個登入終端 也就是登入的 shell 介面 同時管理多個工作的行為。也就是說,我們登陸了乙個終端,已經在執行乙個操作,那麼是否可以在不關閉當前操作的情況下執行其他操作呢?當然可以,我們可以再啟動乙個終端,然後執行其他的操作。不過,是否可以在乙個終端執行不同的操作呢?這就需要通過工作管理來實...

Linux 工作管理

工作管理指的是在單個登入終端 也就是登入的 shell 介面 同時管理多個工作的行為。只要將需要操作的命令放入前台,其他命令放入後台即可。前台是指當前可以操控和執行命令的這個操作環境 後台是指工作可以自行執行,但是不能直接用 ctrl c 快捷鍵來中止它,只能使用 fg bg 來呼叫工作。當前的登入...