程序管理之工作管理詳解 job control

2021-09-20 19:31:45 字數 4787 閱讀 1470

1 什麼是工作管理(job control)

我們知道linux是多工多終端工作的作業系統。我們可以在多個終端進行工作,也可以在乙個終端進行多個任務工作。那在乙個終端同時進行多個工作任務,就稱為工作管理。比如這種情況,在乙個終端,你想要複製檔案,同時你還想壓縮打包檔案,甚至你還想編輯檔案,這個時候就要用到工作管理。工作管理的情況,大概是這樣的。直接上圖。

首先,你要明白前台,後台的概念。前台就是當前我們登陸shell操作的終端,我們與之互動,看得見,摸得著得終端。後台就是與使用者不用互動的操作環境。我們可以將執行的命令放入後台便不用再手動管理,能夠自動完成任務。

前台執行(forebackground):將工作程序放入與使用者互動的終端執行。

後台執行(running):將工作程序放入不再與使用者互動的後台執行。

後台暫停(stopped):工作程序暫停狀態。

完成(done):工作完成。

終止(terminated):工作程序被終止。

2  如何進行工作管理

2.1 直接將指令放到後台執行:&[1] 6798                    #第一步:打包並壓縮/etc目錄

#第二步:將標準輸出流寫入檔案

#第三步:&將工作放入後台     

[root@big backup]# jobs     #job 檢視工作狀態為running,即後台執行                   

[root@big backup]# jobs -l  #job -l 還可以檢視工作程序的pid 

[root@big backup]# jobs -l  #再次檢視,發現工作狀態done,即結束狀態,工作完成

解析:        & 放入後台命令

jobs -l 可檢視四個內容:工作號 pid 工作狀態 工作命令

[1]+     工作號,+號表示第乙個工作

6798     程序ip(pid)

done     工作程序完成

tar...   工作命令

2.2 將在前台進行的工作放入後台暫停(stopped):(command+(ctrl+z))

tar: removing leading `/' from member names

^z                                                #ctrl+z 將前台工作程序放入暫停狀態

[root@big backup]# jobs -l                        #檢視工作資訊

2.3 將後台工作放入前台執行:fg

[root@big backup]# jobs -l                        #檢視工作資訊

[root@big backup]# fg %1            #將工作放入前台執行

2.4 將後台暫停工作(stopped)放入後台執行(running):bg

[root@big backup]# bg %1;jobs -l        #將工作號為1的工作放入後台執行,並且檢視工作資訊

[root@big backup]# jobs -l              #再次檢視工作狀態:done,即完成。

2.5 kill命令管理工作很多人常常會把kill當作殺程序的命令,其實這樣理解是不對的,kill命令的作用遠遠不止如此。kill更像是一種傳送訊號的命令,通過傳送訊號,告訴程序下一步該幹什麼。我們可以通過(kill -l)來檢視kill支援的訊號。在這我僅介紹四種與工作管理相關的訊號。

[root@big backup]# kill -l

1) sighup  2) sigint  3) sigquit  4) sigill  5) sigtrap

6) sigabrt  7) sigbus  8) sigfpe  9) sigkill 10) sigusr1

11) sigse** 12) sigusr2 13) sigpipe 14) sigalrm 15) sigterm

16) sigstkflt 17) sigchld 18) sigcont 19) sigstop 20) sigtstp

21) sigttin 22) sigttou 23) sigurg 24) sigxcpu 25) sigxfsz

26) si**talrm 27) sigprof 28) sigwinch 29) sigio 30) sigpwr

31) sigsys 34) sigrtmin 35) sigrtmin+1 36) sigrtmin+2 37) sigrtmin+3

38) sigrtmin+4 39) sigrtmin+5 40) sigrtmin+6 41) sigrtmin+7 42) sigrtmin+8

43) sigrtmin+9 44) sigrtmin+10 45) sigrtmin+11 46) sigrtmin+12 47) sigrtmin+13

48) sigrtmin+14 49) sigrtmin+15 50) sigrtmax-14 51) sigrtmax-13 52) sigrtmax-12

53) sigrtmax-11 54) sigrtmax-10 55) sigrtmax-9 56) sigrtmax-8 57) sigrtmax-7

58) sigrtmax-6 59) sigrtmax-5 60) sigrtmax-4 61) sigrtmax-3 62) sigrtmax-2

63) sigrtmax-1 64) sigrtmax

解析:四種常用的訊號以及用法例項

9) sigkill 強制殺死正在執行的程序

15) sigterm 正常終止正在執行的程序

18) sigcon  繼續執行,相當於bg

19) sigstop 後台暫停,進入後台暫停狀態(stopped)

例項:    [1] 8482

解析:    通過以上例項分析,可得知(kill -19 )可將後台執行的工作程序放入後台暫停

通過以上例項分析,可得知(kill -18 )可將後台暫停的工作程序放入後台執行

通過以上例項分析,可得知(kill -15 )可將後台執行的工作程序正常終止

2.6 離線管理工作程序:nohup前面提到的工作管理都依賴於終端。一旦終端關閉,正在執行的或者是後台暫停的工作都會終止。那有沒有辦法,使我們執行的命令脫離終端的限制,也就是當我關閉了當前的終端,原先執行的命令會仍然繼續執行。答案是:當然有,那就是給力的nohup命令。

格式:nohup command &

終端pts/0

[1] 8910

[1]+  8910 running                 nohup ping 10.0.0.1 &>/dev/null &

logout

connection closed by foreign host.

disconnected from remote host( 7.3 10.0.0.73) at 14:23:18.

終端pts/1

[root@big ~]# ps aux | grep ping                            #另一終端搜尋ping工作程序

root       8910  0.0  0.1 127912  1228 ?        s    14:22   0:00 ping 10.0.0.1

root       8932  0.0  0.0 112648   960 pts/1    s+   14:23   0:00 grep --color=auto ping

[root@big ~]# kill 8910                                     #正常終止ping工作程序

[root@big ~]# ps aux | grep ping                            #檢視程序是否被終止

root       8973  0.0  0.0 112648   960 pts/1    s+   14:25   0:00 grep --color=auto ping

解析:    pts/0使用nohup command & 離線模式執行命令

在另一終端pts/1 檢視ping工作程序,發現ping工作程序正在執行,由此證明nohup執行命令可脫離終端

正常終止ping程序,驗證是否終止

實驗到此結束

3  總結

好了,現在讓我們通過下圖回顧一下工作管理用到的命令。

Linux 程序管理動態程序管理 詳解

訊號種類 kill l列出所有支援的訊號 kill使用訊號控制程序kill 訊號名編號程序優先順序nice linux程序排程及多工 每個cpu在乙個時間點上只能處理乙個程序,通過時間片技術,來同時執行多個程式。pr 系統內定的優先順序值比ni大20 99 39 ni nice優先值可人為變動 20...

工作管理 程序管理 (Linux筆記)

一 工作管理 1 直接將命令丟到後台中執行 eg tar jcv f infor t.tar.bz2 infor test1 將test1壓縮 2 ctrl z 將目前的工作丟到後台中暫停 3 jobs 檢視目前後台工作狀態 jobs lsr l 除了列出job number與命令串外,還列出pid...

Linux詳解 程序管理

接下來的幾篇部落格,我將主要按照這個思維導圖的劃分去進行講解。在理解什麼是程序管理之前,我想我們可以先理解一下什麼是管理!問題 什麼是管理?管理的過程就是 先描述,再組織 所有事情都可以被分類為 決策 和 執行 管理的三個角色 資訊 資料 資訊量太大怎麼辦?結論 問題 什麼是程序?我們該如何理解程序...