進程管理之工作管理詳解(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
下一篇 2017-05-14

相關推薦

  • Centos6搭建vsftpd手冊

    1、開啟防火墻ftp端口vi /etc/sysconfig/iptables     #編輯防火墻配置文件 1 -A INPUT -m state –state NEW -m tcp -p tcp –dport 21 -j ACCEPT(允許21端口通過防火墻) 2 -A INPUT -m st…

    Linux干貨 2017-04-26
  • 程序員的相關笑話(二)

    從前,有一個牧羊人,他有很多的羊。一天他趕著他的那群羊到了一條公路邊上。突然,有一輛保時潔急駛過來,上面坐著一個年輕人人,穿著Armani的衣服,和Cerutti的皮鞋,Ray-Ban的太陽眼鏡,TAG-Heuer的手表,以前Versace的領帶。 他走到牧羊人面前問牧羊人:“如果我能說出你有多少只羊,你能給我一只嗎?” 牧羊人看了看他那一大群數都數不過來的…

    Linux干貨 2016-07-10
  • 顯示歷史命令時間

        歷史命令中默認是不顯示時間的,如果我們想要在使用history命令時顯示時間可以通過設置環境變量來實現。     HISTTIMEFORMAT變量的具體參數與date命令中的類似,可以參數date命令的對日期時間格式時行修改。    &nbs…

    Linux干貨 2015-05-02
  • 學習開始拼搏、加油、努力

          搏一搏單車變摩托,用4個月時間為自己創造一個更好的未來,歐耶!。。。

    Linux干貨 2016-10-28
  • GRUB啟動故障排除和內核編譯

    如何進入光盤應急系統(以下修復操作僅適用于GRUB legacy, 不適用于GRUB2): 步驟一:給主機掛上安裝光盤, 或者有相應啟動鏡像的硬盤分區(可移動的分區) 步驟二:開機時選擇CDROM先啟動 步驟三:進入光盤啟動界面選擇應急救援模式 步驟四: 不選擇設置網絡接口, 直接讀取磁盤分區并以讀寫方式掛載 步驟五: 選擇shell進入bash中對磁盤進行…

    Linux干貨 2016-09-12
  • Linux Basics-Linux Bash歷史和其概念名詞解釋part1

    Linux Basics-Linux Bash歷史和其概念名詞解釋part1 閱讀本文你將知道:查看更多BashFAQ.pdf   Bash的歷史及其特性   Bash的如何工作   Bash的概念解釋   前提知識:      對linux有一定基礎而且了解Bash的…

    Linux干貨 2016-10-29
欧美性久久久久