進程管理之工作管理詳解(job control)

進程管理之工作管理詳解(job control)


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

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

進程管理之工作管理詳解(job control)

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

  前臺運行(Forebackground):將工作進程放入與用戶交互的終端運行。
  后臺運行(Running):將工作進程放入不再與用戶交互的后臺運行。
  后臺暫停(Stopped):工作進程暫停狀態。
  完成(Done):工作完成。
  終止(terminated):工作進程被終止。 

2  如何進行工作管理

        2.1 直接將指令放到后臺執行:&

[root@big backup]# tar -zpcf /apps/backup/etc.tar.gz &>/apps/backup/backup.log /etc &
[1] 6798                    #第一步:打包并壓縮/etc目錄
                            #第二步:將標準輸出流寫入文件
                            #第三步:&將工作放入后臺     
[root@big backup]# jobs     #job 查看工作狀態為Running,即后臺運行                   
[1]+  Running                 tar -zpcf /apps/backup/etc.tar.gz /etc &>/apps/backup/backup.log &
[root@big backup]# jobs -l  #job -l 還可以查看工作進程的PID 
[1]+  6798 Running                 tar -zpcf /apps/backup/etc.tar.gz /etc &>/apps/backup/backup.log &
[root@big backup]# jobs -l  #再次查看,發現工作狀態Done,即結束狀態,工作完成
[1]+  6798 Done                    tar -zpcf /apps/backup/etc.tar.gz /etc &>/apps/backup/backup.log
解析:
        & 放入后臺命令
        jobs -l 可查看四個內容:工作號 PID 工作狀態 工作命令
        [1]+     工作號,+號表示第一個工作
        6798     進程IP(pid)
        Done     工作進程完成
        tar...   工作命令

2.2 將在前臺進行的工作放入后臺暫停(Stopped):(command+(ctrl+z))

[root@big backup]# tar -zpcf /tar -zpcf /apps/backup/etc.tar.gz  /etc         #打包壓縮命令
tar: Removing leading `/' from member names
^Z                                                #ctrl+z 將前臺工作進程放入暫停狀態
[1]+  Stopped                 tar -zpcf /apps/backup/etc.tar.gz /etc
[root@big backup]# jobs -l                        #查看工作信息
[1]+  7214 Stopped                 tar -zpcf /apps/backup/etc.tar.gz /et    #Stopped 表示后臺暫停

2.3 將后臺工作放入前臺運行:fg

[root@big backup]# jobs -l                        #查看工作信息
[1]+  7214 Stopped                 tar -zpcf /apps/backup/etc.tar.gz /et
[root@big backup]# fg %1            #將工作放入前臺運行
tar -zpcf /apps/backup/etc.tar.gz /etc

2.4 將后臺暫停工作(Stopped)放入后臺運行(Running):bg

[root@big backup]# bg %1;jobs -l        #將工作號為1的工作放入后臺運行,并且查看工作信息
[1]+ tar -zpcf /apps/backup/etc.tar.gz /etc &
[1]+  7434 Running                 tar -zpcf /apps/backup/etc.tar.gz /etc &
[root@big backup]# jobs -l              #再次查看工作狀態:Done,即完成。
[1]+  7434 Done                    tar -zpcf /apps/backup/etc.tar.gz /etc

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) SIGSEGV    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) SIGVTALRM  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)
    
實例:
    [root@big apps]#  tar -zcf /apps/tmp.tar.gz / &>/apps/tmp.log &    #將打包壓縮工作進程放入后臺
    [1] 8482
    [root@big apps]# jobs -l                                           #查看工作進程信息
    [1]+  8482 Running                 tar -zcf /apps/tmp.tar.gz / &
    [root@big apps]# kill -19 %1                                       #將第一個工作放入后臺暫停
    [1]+  Stopped                 tar -zcf /apps/tmp.tar.gz /
    [root@big apps]# jobs -l                                           #查看工作進程信息
    [1]+  8482 Stopped (signal)        tar -zcf /apps/tmp.tar.gz / 
    [root@big apps]# kill -18 %1;jobs -l                               #將第一個工作放入后臺運行
    [1]+  8482 Running                 tar -zcf /apps/tmp.tar.gz / &
    [root@big apps]# jobs -l
    [1]+  8482 Running                 tar -zcf /apps/tmp.tar.gz / &
    [root@big apps]# kill -15 %1                                       #正常終止工作
    [root@big apps]# jobs -l                                           #工作狀態Teminated,終止。
    [1]+  8482 Terminated              tar -zcf /apps/tmp.tar.gz /
    [root@big apps]# jobs -l                                           #再次查看后臺沒有工作進程
解析:
    通過以上實例分析,可得知(kill -19 )可將后臺運行的工作進程放入后臺暫停
    通過以上實例分析,可得知(kill -18 )可將后臺暫停的工作進程放入后臺運行
    通過以上實例分析,可得知(kill -15 )可將后臺運行的工作進程正常終止

2.6 脫機管理工作進程:nohup

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

格式:nohup command &

終端pts/0
[root@big apps]# nohup ping 10.0.0.1 &>/dev/null &            #使用nohup離線模式執行ping命令
[1] 8910
[root@big apps]# jobs -l                                      #查看后臺工作狀態
[1]+  8910 Running                 nohup ping 10.0.0.1 &>/dev/null &
[root@big apps]# exit                                         #退出當前終端
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  總結

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

進程管理之工作管理詳解(job control)

作者:Michael Hu
時間:2017/05/14

原創文章,作者:PowerMichael,如若轉載,請注明出處:http://www.www58058.com/75525

(0)
PowerMichaelPowerMichael
上一篇 2017-05-14 11:20
下一篇 2017-05-14 16:03

相關推薦

  • Linux用戶、組和權限管理詳解

    用戶管理簡要說明:     1.越是對服務器安全性要求高的服務器,越需要建立合理的用戶權限等級制度和服務器操作規范。     2.在Linux中主要是通過用戶配置文件來查看和修改用戶信息。 初始組和附加組     初始組:就是指用戶一登錄就立刻擁有這個用戶組的相關權限,每個用戶的…

    Linux干貨 2016-08-05
  • 進程管理,計劃任務(2)

    二、作業管理     Linux的作業控制         前臺作業:通過終端啟動,且啟動后一直占據終端;         后臺作業:可通過終端啟動,但啟動后即…

    Linux干貨 2016-09-18
  • MySQL高可用架構之MHA

    MySQL高可用架構之MHA 1、關于MHA MHA(Master HA)是一款開源的MySQL的高可用程序,它為MySQL主從復制架構提供了automating master failover功能。MHA在監控到master節點故障時,會提升其中擁有的最新數據的slave節點成為新的master節點,在此期間,MHA會通過其它從節點獲取額外信息來避免一致性…

    Linux干貨 2017-03-30
  • N26第三周博客作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。    who | cut -d' ' -f1 | sort -u 2、取出最后登錄到當前系統的用戶的相關信息。    last | head -1   3、取出當前系統上被用戶當作其默認s…

    Linux干貨 2017-02-03
  • 第一周的作業

    1、描述計算機的組成及其功能。 主要分為五個部分: 控制器:計算機的中樞神經,控制總線使用權限、尋址、管理各類資源的分配。 運算器:對數據進行各種算數運算和邏輯運算。 存儲器:通常指內存RAM,CPU需要運行的程序以及數據都存放在存儲器中供CPU調用處理。 (以上三者為計算機核心的三大部件,依靠這三大部件即可完成核心工作。) 輸入設備:比如鼠標、鍵盤,使用戶…

    Linux干貨 2016-11-02
  • 文件查找find與壓縮

    1.locate:   locate是查詢系統上預建的文件索引數據庫    /var/lib/mlocate/mlocate.db   依賴于事先構建的索引   索引的構建是在系統較為空閑時自動進行(周期性任務),管理 員手動更新數據庫(updatedb)    缺點:索引構建過…

    Linux干貨 2016-08-18
欧美性久久久久