進程管理之工作管理詳解(job control)
1 什么是工作管理(job control)
我們知道linux是多任務多終端工作的操作系統。我們可以在多個終端進行工作,也可以在一個終端進行多個任務工作。那在一個終端同時進行多個工作任務,就稱為工作管理。比如這種情況,在一個終端,你想要復制文件,同時你還想壓縮打包文件,甚至你還想編輯文件,這個時候就要用到工作管理。工作管理的情況,大概是這樣的。直接上圖。
首先,你要明白前臺,后臺的概念。前臺就是當前我們登陸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 總結
好了,現在讓我們通過下圖回顧一下工作管理用到的命令。
作者:Michael Hu 時間:2017/05/14
原創文章,作者:PowerMichael,如若轉載,請注明出處:http://www.www58058.com/75525