AI智能
改变未来

『学了就忘』Linux系统管理 — 84、Linux中进程的管理

[toc]

1、Linux系统中的信号

Linux系统中可以识别的信号较多,我们可以使用命令

kil1 -1

man 7 signal

来查询,

命令如下:

[root@localhost ~]# kill -l1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR111) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+338) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+843) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+1348) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-1253) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-758) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-263) 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/sshdroot       5470  0.0  0.2 102084  4148 ?        Ss   20:41   0:00 sshd: root@pts/2root       5883  0.0  0.2 102084  4140 ?        Ss   22:09   0:00 sshd: root@pts/0root       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/sshdroot       5470  0.0  0.2 102084  4148 ?        Ss   20:41   0:00 sshd: root@pts/2root       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 ~]# w22:16:25 up 13:34,  3 users,  load average: 0.00, 0.01, 0.05USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHATroot     tty1     -                22:16    6.00s  0.04s  0.04s -bashroot     pts/0    192.168.134.1    22:09    0.00s  0.17s  0.08s wroot     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 ~]# w22:18:36 up 13:36,  2 users,  load average: 0.00, 0.01, 0.05USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHATroot     tty1     -                22:16    2:17   0.04s  0.04s -bashroot     pts/0    192.168.134.1    22:09    0.00s  0.10s  0.01s w
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 『学了就忘』Linux系统管理 — 84、Linux中进程的管理