『學了就忘』Linux系統管理 — 84、Linux中程序的管理
阿新 • • 發佈:2021-12-17
目錄
1、Linux系統中的訊號
Linux系統中可以識別的訊號較多,我們可以使用命令kil1 -1
或man 7 signal
來查詢,
命令如下:
[root@localhost ~]# 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
我們介紹一下常用的主要的訊號:
訊號代號 | 訊號名稱 | 說明 |
---|---|---|
1 | SIGHUP |
該訊號讓程序立即關閉,然後重新讀取配置檔案之後重啟。 |
2 | SIGINT |
程式終止訊號,用於終止前臺程序。相當於輸出ctrl+c 快捷鍵。 |
8 | SIGFPE |
在發生致命的算術運算錯誤時發出,不僅包括浮點運算錯誤,還包括溢位及除數為0等其它所有的算術的錯誤。 |
9 | SIGKILL |
用來立即結束程式的執行,本訊號不能被阻塞、處理和忽略。一般用於強制終止程序。 |
14 | SIGALRM |
時鐘定時訊號,計算的是實際的時間或時鐘時間。alarm 函式用該訊號。 |
15 | SIGTERM |
正常結束程序的訊號,kill SIGKILL 訊號,也就是訊號9。 |
18 | SIGCONT |
該訊號可以讓暫停的程序恢復執行,本訊號不能被阻斷。 |
19 | SIGSTOP |
該訊號可以暫停前臺程序,相當於輸入ctrl+z 快捷鍵。本訊號不能被阻斷。 |
提示:這其中最常用的是1和9,請記住。
2、殺掉程序的命令
(1)kill命令
kill
命令後邊只能跟程序的id
號,不能跟程序名稱。
[root@localhost ~]# kill [訊號] PID
例1:使用-1
訊號,讓程序重啟。
# 使用“-1(數字一)”訊號,讓httpd的主程序重啟動。 [root@localhost ~]# kill -1 2345
例2:使用-9
訊號,讓結束一個程序。
# 使用“-9”訊號,讓xinetd的程序結束執行。
[root@localhost ~]# kill -9 5678
(2)killall命令
killall
命令一般用於殺掉一類程序。
[root@localhost ~]# killall [選項] [訊號] 程序名
選項:
-i:互動式,詢問是否要殺死某個程序。
-I:忽略程序名的大小寫。
注意:
killall
命令要寫程序名,不要寫程序id
。
示例:
# 查詢系統有3個sshd程序。1735是sshd服務的程序,5470和5883是我的兩個遠端連線的程序。
[root@localhost ~]# ps aux | grep "sshd"
root 1735 0.0 0.0 66236 1204 ? Ss 08:42 0:00 /usr/sbin/sshd
root 5470 0.0 0.2 102084 4148 ? Ss 20:41 0:00 sshd: root@pts/2
root 5883 0.0 0.2 102084 4140 ? Ss 22:09 0:00 sshd: root@pts/0
root 6088 0.0 0.0 103332 852 pts/0 S+ 22:28 0:00 grep sshd
# 過濾一下
[root@localhost ~]# ps aux | grep "sshd" | grep -v "grep"
root 1735 0.0 0.0 66236 1204 ? Ss 08:42 0:00 /usr/sbin/sshd
root 5470 0.0 0.2 102084 4148 ? Ss 20:41 0:00 sshd: root@pts/2
root 5883 0.0 0.2 102084 4140 ? Ss 22:09 0:00 sshd: root@pts/0
# 互動式殺死sshd程序
[root@localhost ~]# killall -i sshd
# 這個程序是sshd的服務程序,如果殺死,所有的sshd連線都不能登入。
殺死sshd(1735)?(y/N)n
# 這是我當前登入終端,不能殺死我自己吧!
殺死sshd(5470)?(y/N)n
# 可以把另外一個sshd登入終端踢出。
殺死sshd(5883)?(y/N)y
(3)pkill命令
pkill
命令和killall
命令非常類似,也是按照程序名來殺死程序。
格式如下:
[root@localhost ~]# pkill [選項] [訊號] 程序名
選項:
-t終端號:按照終端號踢出使用者。
示例:
# 檢視當前Linux系統中登陸的終端
# 注意WHAT為w的就代表是當前終端,也就是我自己。
[root@localhost ~]# w
22:16:25 up 13:34, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - 22:16 6.00s 0.04s 0.04s -bash
root pts/0 192.168.134.1 22:09 0.00s 0.17s 0.08s w
root pts/2 192.168.134.1 20:41 56:31 0.19s 0.19s -bash
# 提出終端號為pts/2的使用者
# 注意-9一定要放在-t前,否則命令不能執行成功。
[root@localhost ~]# pkill -9 -t pts/2
# 再看當前Linux系統中登陸的終端
[root@localhost ~]# w
22:18:36 up 13:36, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - 22:16 2:17 0.04s 0.04s -bash
root pts/0 192.168.134.1 22:09 0.00s 0.10s 0.01s w