進程管理類命令 信號: 在linux當中所有的進行管理都是靠信號來管理的.像我們平時要結束某個進程就是使用的15信號SIGTERM,還有想要強制殺死某個進程,就是使用的9信號SIGKILL等等. 在linux可以查看信號有哪些的指定太多了,kill -l ; trap -l; man 7 signa ...
進程管理類命令
信號:
在linux當中所有的進行管理都是靠信號來管理的.像我們平時要結束某個進程就是使用的15信號SIGTERM,還有想要強制殺死某個進程,就是使用的9信號SIGKILL等等.
在linux可以查看信號有哪些的指定太多了,kill -l ; trap -l; man 7 signal等等
這裡列數linux中的所有信號:
信號名程有點長,信號有三種表示法:
數字方式 9 2 3 1 19 15 18
SIGNAL完整寫法 SIGKILL SIGTERM SIGQUIT SIGHUP SIGINT SIGSTOP
簡寫法: HUP INT QUIT CONT QUIT KILL TERM
信號雖然多,但是常用的沒幾個,常用的信號:
-0 進行命令的健康性檢查,這種檢查不嚴謹,意思意思
-1 SIGHUP 無須關閉進程而讓其重讀配置文件
-2 SIGINT 終止正在運行的進程,相當於ctrl + c,使用ctrl+c快捷鍵只能終止前臺進程,但-2信號前臺後臺都能終止
-3 SIGQUIT 相當於ctrl + \
-9 SIGKILL 強制殺死正在運行的進程
-15 SIGTERM 發送正常結束進程,15信號是結束不了停止態的進程,預設信號.TERM是terminal終端簡寫
-18 SIGCONT 複活進程 SIGCONT,但是不能複活那種交互的後臺停止命令
-19 SIGSTOP 進入停止態 SIGSTOP
這裡在重覆說下,上面表裡命名沒有0信號,這裡怎麼還有0信號呢,這隻是一個特殊的用法,可以不記,看下官方給0信號的解釋:
If sig is 0, then no signal is sent, but error checking is still performed
如果這個信號是0,則不會真正的發送信號,到那時會進行錯誤檢查
與信號相關的命令:
kill命令 用於向進程發送信號,以實現進程的管理
選項:
-l 顯示信號列表
kill -l # 把#對應的數字翻譯成信號
-s SIGNAL 指定發送的信號,一般可以直接簡寫成-SIGNAL
語法:
kill SIGNAL PID1 PID2 ... 給PID進程發送SIGNAL信號
kill SIGNAL %JOBID 給作業編號%JOBID的進程發送SIGNAL信號
killall命令 根據進程名來管理進程
主要用來批量結束相同命令名的進程
語法:
killall [-SIGNAL] COMMAND 使用命令名稱來結束命令,而且是一次性結束所有
killall -0 ping 檢查ping命令是否是健康的,不嚴謹的檢查
pkill命令 根據進程名或其他屬性來結束進程
選項:
-t 終端 根據終端來查找相關進程並結束
-e 顯示哪個進程被結束了,及其PID
-u EUID 結束有效UID
-U UID 結束實際UID
trap命令 捕獲信號設定自定義操作
語法:
trap [OPTIONS] 'CMD' SIGNAL 在收到系統發出的指定信號後執行自定義指令
trap '' SIGNAL 接收到信號,什麼觸髮指令也不執行
trap '-' SIGNAL 恢覆信號的原始作用
選項:
-p 列出自定義信號操作
-l 列印信號列表,等同於kill -l
作業管理:
在linux中拷貝文件真的太不舒服了,小文件還好,如果大文件了.那就得乾等著了,什麼也做不了.只能等cp命令結束後在操作.後來才知道可以把cp命令放入到後臺繼續執行.
把程式放到後臺執行的方法:
- COMMAND & 可以讓COMMAND在後臺繼續執行
- 先打開COMMAND命令,然後按ctrl + z讓程式在後臺暫停
讓後臺程式繼續執行的方法:
- kill -18 COMMAND
- bg %工作號 工作號可以通過jobs命令查詢到
把後臺程式挪回前臺的方法:
- fg %工作號 工作號可以通過jobs命令查詢到
備註:無論是前臺進程還是後臺進程,都是當前shell的子進程,也就是會所在當前shell結束後子進程中前臺進程還是後臺進程都會結束.有沒有不結束的方法嗎?
三種在bash結束的時候不終止子進程的方法:
- 先運行screen命令,然後在執行要操作的命令
- 先運行tmux命令,然後在執行要做錯的命令
- nohup COMMAND COMMAND就是要執行的命令
不是所有放入後臺的進程都能繼續執行,像那些占據終端前臺視窗與用戶有交互的命令是不能放在後臺繼續運行的,如vim nano等等
後臺進程不占據終端視窗,還可以在後臺繼續執行.這就可以實現程式的並行執行了.
方法1:
cat all.sh
COMMAND1 &
COMMAND2 &
COMMAND3 &
方法2:
(COMMAND1&);(COMMAND2&);(COMMAND3&)
方法3:
{ COMMAND1; COMMAND2; }& f2.sh& f3.sh&
看個小示例:
1 #/bin/bahs 2 3 # 4 5 NET=10.0.0. 6 7 8 9 for i in {1..254};do 10 11 { 12 13 ping -c1 -w1 ${NET}${i} &> /dev/null && echo "${NET}${i} is up" || echo "${NET}${i} is down" 14 15 }& 16 17 done 18 19 wait
小命令:
screen命令
主要作用是在shell視窗關閉時screen中的子進程不會關閉
選項:
-S 創建會話
-x 加入某個會話
-ls 列出已隱藏的會話
-r [SESSION] 恢復某個會話
Ctrl+a,d 隱藏會話,先按ctrl+a鍵,鬆開再按d鍵
案例一:
客戶端一:創建新screen會話
screen -S new
客戶端二:加入new會話
screen -x new
然後在客戶端一中鍵入的命令在客戶端二上也能同步看到,同樣的客戶端二同樣也可以操作.客戶端已上也能看到客戶端二操作.這就是QQ遠程協助.嘿嘿
客戶端二:退出new會話
ctrl +a 鬆開再按d鍵
案例二:
創建會話
screen
執行某個耗時的命令例如
tar -cJf /tmp/usr.tar.xz /usr
隱藏會話
ctrl+a 鬆開再按d鍵
可以斷開終端去玩游戲吧
exit
玩完回來看看耗時命令跑完了嗎
screen -ls
screen -r [SESSION] [SESSION] 就是通過screen -ls查到的號碼
tmux命令
tmux是screen的增強版,更加強大.不過也有一點不好,就是功能太強大.記不住
tmux視窗有大量的快捷鍵,所有的快捷鍵調用前都有一個首碼ctrl+b,只有先按下ctrl+b後快捷鍵才能生效.
創建會話:
第一種: tmux 直接創建一個編號為0的會話
第二種: tmux new -s NAME 創建一個名為NAME的會話
隱藏會話:
按住ctrl + b 鬆開再按d鍵
關閉會話:
第一種: 在會話中,按住ctrl+b 鬆開再按x鍵 確認即可
第二種: 在bash中使用 tmux kill-session -t NAME
加入會話:
tmux attach -t NAME
切換會話:
tmux switch -t NAME
顯示會話列表
tmux ls
在tmux中有會話,視窗,窗格的概念.上邊都是創建會話的類似screen的功能,下麵的都是tmux獨有的功能
創建新視窗:
第一種:在bash中
tmux new-window 創建一個新視窗預設名稱是數字 0 1 3等等
備註在創建視窗的時候前提必須先創建一個會話.把新視窗加入到這個會話中
tmux new-window -n WIN-NAME 給新視窗起個名稱
第二種:在會話中
按住ctrl +b,鬆開再按c 可以創建一個新視窗
按住ctrl +b,鬆開再按, 可以給當前視窗重命名
切換視窗:
第一種:在bash中
tmux select-window -t WIN-NUMBER 切換到指定視窗號的視窗
tmux select-window -t WIN-NAME 切換到指定視窗名稱的視窗
第二種:在會話中
按住ctrl+b,鬆開再按p 切換到上一個視窗
按住ctrl+b,鬆開再按n 切換到下一個視窗
按住ctrl+b,鬆開再WIN-NUMBER 切換到指定視窗數字的視窗
按住ctrl+b,鬆開再按w 從列表中選在要切換的視窗
隱藏會話:
按住ctrl+b,鬆開再按d
關閉會話:
按住ctrl+b,鬆開再按x 確認
創建窗格:
按住ctrl+b,鬆開再按” 切換成上下窗格
按住ctrl+b,鬆開再按% 切換成左右窗格
切換游標:
按住ctrl+b,鬆開再按方向鍵 把游標移動到上下左右窗格上
按住ctrl+b,鬆開再按; 把游標移動到上窗格
按住ctrl+b,鬆開再按o 把游標移動到下窗格
按住ctrl+b,鬆開再按{ 把游標移動到左窗格
按住ctrl+b,鬆開再按} 把游標移動到右窗格
切換窗格位置:
按住ctrl+b,鬆開再按ctrl+o 當前游標所在窗格上移
按住ctrl+b,鬆開再按alt+o 當前游標所在窗格下移
其他用法:
按住ctrl+b,鬆開再按! 把當前窗格切換成一個單獨的視窗
按住ctrl+b,鬆開再按? 顯示幫助,q退出
按住ctrl+b,鬆開再按q 顯示視窗序號
個人感覺tmux功能是強大,不過好似用不到這麼多功能,或者說這強大功能是針對少數有需求的人.基礎幾個就好.筆記現在遠程管理工具都支持標簽了,滑鼠點起來也挺方便的.tmux和screen的主要功能是在關閉shell後不斷子進程.蘿蔔青菜各有所愛.