進程管理類命令linux
信號:shell
在linux當中全部的進行管理都是靠信號來管理的.像咱們平時要結束某個進程就是使用的15信號SIGTERM,還有想要強制殺死某個進程,就是使用的9信號SIGKILL等等.vim
在linux能夠查看信號有哪些的指定太多了,kill -l ; trap -l; man 7 signal等等bash
這裏列數linux中的全部信號:session
信號名程有點長,信號有三種表示法:工具
數字方式 9 2 3 1 19 15 18spa
SIGNAL完整寫法 SIGKILL SIGTERM SIGQUIT SIGHUP SIGINT SIGSTOP翻譯
簡寫法: HUP INT QUIT CONT QUIT KILL TERMcode
信號雖然多,可是經常使用的沒幾個,經常使用的信號:orm
-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命令放入到後臺繼續執行.
把程序放到後臺執行的方法:
讓後臺程序繼續執行的方法:
把後臺程序挪回前臺的方法:
備註:不管是前臺進程仍是後臺進程,都是當前shell的子進程,也就是會所在當前shell結束後子進程中前臺進程仍是後臺進程都會結束.有沒有不結束的方法嗎?
三種在bash結束的時候不終止子進程的方法:
不是全部放入後臺的進程都能繼續執行,像那些佔據終端前臺窗口與用戶有交互的命令是不能放在後臺繼續運行的,如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後不斷子進程.蘿蔔青菜各有所愛.