『學了就忘』Linux系統管理 — 84、Linux中進程的管理


1、Linux系統中的信號

Linux系統中可以識別的信號較多,我們可以使用命令kil1 -1man 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM