在Linux系統中,作業是由一個或多個關聯進程組成的。用戶可以運行多個作業並可以在作業間切換。而作業控制則是對作業的行為進行控制,允許用戶對作業的前後臺的進行切換和終止操作等。作業相關的控制命令如下所示: 後臺符號(&):讓作業在後臺運行 快捷鍵Ctrl+Z:讓作業切換到 ...
在Linux系統中,作業是由一個或多個關聯進程組成的。用戶可以運行多個作業並可以在作業間切換。而作業控制則是對作業的行為進行控制,允許用戶對作業的前後臺的進行切換和終止操作等。作業相關的控制命令如下所示:
- 後臺符號(&):讓作業在後臺運行
- 快捷鍵Ctrl+Z:讓作業切換到後臺並停止運行
- 命令jobs:顯示作業列表
- 命令fg:將作業切換到前臺並運行
- 命令bg:將作業切換到後臺並運行
- 命令kill:終止作業
當用戶在終端中啟動一個作業時,它會預設在前臺運行。前臺作業的特點就是從標準輸入接收用戶指令並通過標準輸出將返回信息展示給用戶。
後臺作業則脫離了標準輸入和標準輸出,並不需要用戶參與,默默在用戶看不到的地方運行。類似於Windows中多視窗界面,選中一個視窗則自動激活視窗並切換到前臺運行,而其他視窗則自動轉入後臺運行。
後臺符號 &
後臺符號則是指 ** & **,使用起來也非常簡單,只需要把該符號放置在執行命令的後面即可。通過在執行一個命令需要花費較長的時間或執行命令後就不再需要用戶輸入命令等操作時使用,示例如下:
[root@localhost ~]# sleep 20m &
[1] 12925
- 後臺符號與前面的命令之間需要添加空格
- [1]表示後臺作業任務的編號
- 12925表示後臺作業對應的PID
如通過管道技術,作業由一組命令組成,此時返回的PID是最後一個命令程式所對應的PID
快捷鍵Ctrl+Z
如果在執行命令的忘記輸入後臺符號時,此時我們可以使用快捷鍵Ctrl+Z,將前臺作業切換到後臺。而該作業在切換到後臺也自動會停止運行,示例如下:
[root@localhost ~]# top -d 3
top - 23:09:05 up 1 day, 8:56, 1 user, load average: 0.41, 0.48, 0.68
KiB Mem :13174040+total,91322784 free,34024536 used,6393076 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 96571448 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2325 mysql 20 0 20.7g 383068 12780 S 23.5 0.3 47:02.72 mysqld
1873 cinder 20 0 476152 103060 8900 S 5.9 0.1 40:59.23 cinder-backup
# 使用Ctrl+Z可以看到作業已經轉入後臺並停止運行
[3]+ 已停止 top -d 3
顯示作業列表jobs
基本用法
jobs [選項] [jobID]
其常用選項如下所示:
選項 | 說明 |
---|---|
-l | 顯示PID |
-p | 僅顯示作業的PID |
-r | 僅顯示運行狀態的作業 |
-s | 僅顯示停止狀態的作業 |
jobs示例
1、顯示所有作業
[root@localhost ~]# jobs
[2]- 已停止 top -d 3
[3]+ 已停止 top -d 3
[4] 運行中 sleep 20m &
2、顯示作業的ID
[root@localhost ~]# jobs -p
5442
14740
39178
3、僅顯示停止狀態的作業
[root@localhost ~]# jobs -s
[2]- 已停止 top -d 3
[3]+ 已停止 top -d 3
fg
fg全稱frontground,是指將作業切換到前臺並運行。
基本用法
fg [作業標識]
fg示例
1、將後臺作業轉換到前臺並運行
[root@localhost ~]# jobs
[3]+ 已停止 top -d 3
[4] 運行中 sleep 20m &
[6] 運行中 sleep 120m &
[7]- 運行中 sleep 10h &
[root@localhost ~]# fg %3
top - 23:09:05 up 1 day, 8:56, 1 user, load average: 0.41, 0.48, 0.68
KiB Mem :13174040+total,91322784 free,34024536 used,6393076 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 96571448 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2325 mysql 20 0 20.7g 383068 12780 S 23.5 0.3 47:02.72 mysqld
1873 cinder 20 0 476152 103060 8900 S 5.9 0.1 40:59.23 cinder-backup
bg
bg全稱background,是指的主要作用是將作業切換到後臺並運行。
基本用法
bg [作業標識]
bg示例
1、將作業轉換到後臺並運行
[root@localhost ~]# jobs
[2]- 已停止 top -d 3
[3] 已停止 top -d 3
[4] 運行中 sleep 20m &
[5] 運行中 sleep 120s &
[6]+ 已停止 sleep 120m
[root@localhost ~]# bg %6
[6]+ sleep 120m &
[root@localhost ~]# jobs
[2]+ 已停止 top -d 3
[3] 已停止 top -d 3
[4] 運行中 sleep 20m &
[5] 運行中 sleep 120s &
[6]- 運行中 sleep 120m &
終止作業
要想終止作業,則需要使用kill命令即,其常用法如下所示:
kill [jobID]
示例如下所示:
[root@localhost ~]# jobs
[3]+ 已停止 top -d 3
[6] 運行中 sleep 120m &
[7]- 運行中 sleep 10h &
[root@localhost ~]# kill %7
[7]- 已終止 sleep 10h
[root@localhost ~]# jobs
[3]+ 已停止 top -d 3
[6]- 運行中 sleep 120m &
作業名字
在上面的示例,使用的是%n表示形式來指定一個作業任務,除這種方法外,還有其他更多的方式來指定作業任務,詳細如下所示:
表示形式 | 解釋 | 示例 |
---|---|---|
%number | Number必須為正整數,指根據編號確定job | fg %1 |
%string | 匹配命令行以string開頭的作業,如果匹配到多個則報錯 | kill %sleep |
%?string | 匹配命令行含有string的作業,如果是通過管道連接的多個命令,則僅匹配第一個命令 | bg %?sleep |
%% | 匹配在作業列表中最近一個被切換到後臺的作業 | kill %% |
%+ | 同%% | kill %+ |
%- | 匹配在%%所指定的作業前面的作業 | kill %- |
示例
1、%string的用法
[root@localhost ~]# jobs
[3]- 已停止 top -d 3
[6] 運行中 sleep 120m &
[7]+ 已停止 sleep 120h
[root@localhost ~]# kill %top
[root@localhost ~]# jobs
[6]- 運行中 sleep 120m &
[7]+ 已停止 sleep 120h
2、%%用法
[root@localhost ~]# jobs
[6]- 運行中 sleep 120m &
[7]+ 已停止 sleep 120h
# 作業編號後面的+/-分別對應 %+ 和 %-
[root@localhost ~]# bg %7
[7]+ sleep 120h &
[root@localhost ~]# jobs
[6]- 運行中 sleep 120m &
[7]+ 運行中 sleep 120h &
[root@localhost ~]# kill %%
[7]+ 已終止 sleep 120h
[root@localhost ~]# jobs
[6]+ 運行中 sleep 120m &
nohup
終端是我們進入Linux系統的入口,無論是排查問題、執行操作面對的都是Linux終端。當用戶進行註銷、斷開網路時,終端均會收到SIGHUP(hangup)信號,然後關閉其所屬的子進程,而如果我們不希望某些進程被這個SIGHUP信號影響,就需要使用命令nohup。
nohup英文解釋如下:
run a command immune to hangups, with output to a non-tty
在使用nohup命令後,程式是對SIGHUP免疫的,不受影響的。而nohup與 & 的區別如下
- 後臺符號(&):只是暫時讓進程運行於終端後臺,而SIGHUP仍然影響到這些後臺的進程
- nohup:在將進程運行於終端後臺並不受SIGHUP影響。
基本用法
nohup [命令] &
- 如果終端是標準輸入,則從/dev/null進行重定向
- 如果終端是標準輸出,則輸出重定向於當前目錄中nohup.out文件,否則則重定向到$HOME/nohup.out
- 如果終端是標準錯誤輸出,則重定向於標準輸出
- 如果要保存輸出到文件,可以使用nohup [命令] > path/FILE
示例用法
# 將命令設置為後臺運行
[root@localhost ~]# nohup ping www.baiduc.com &
[1] 36247
# 因未指定輸出重定向,預設將標準輸出、標準錯誤輸出都追加至nohup.out
[root@localhost ~]# nohup: 忽略輸入並把輸出追加到"nohup.out"
[root@localhost ~]# jobs
[1]+ 運行中 nohup ping www.baiduc.com &
# 重定向至家目錄中
[root@localhost ~]# nohup ping www.baidu.com > ~/pingTest.txt &
[1] 12588
# 雖指定重定向文件,但未指定標準錯誤輸出重定向文件,因此會出現以下警告
[root@localhost ~]# nohup: 忽略輸入重定向錯誤到標準輸出端
[root@localhost ~]# nohup ping www.baidu.com > ~/pingTest.txt 2>&1 &
[3] 34498
~/pingTest.txt:表示將標準輸出(1)重定向於文件pingTest.txt中
- 2>&1:表示將標準錯誤輸出(2)重定向到標準輸出(1),因些可將標準輸出和標準錯誤輸出均重定向到文件pingTest.txt中
- 如果不需要保存標準錯誤輸出和標準輸出,則可以重定向於/dev/null
本文同步在微信訂閱號上發佈,如各位小伙伴們喜歡我的文章,也可以關註我的微信訂閱號:woaitest,或掃描下麵的二維碼添加關註: