|NO.Z.00013|——————————|^^ 操作 ^^|——|Linux&进程管理.V03|——|kill 进程|
一、进程的管理
### --- 系统中可以识别的信号较多,我们可以使用命令“kill -l”或“man 7 signal”来查询,命令 如下:
[root@server11 ~]# 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
这里我们介绍一下主要的信号,如表 15-6 所示:
信号代号 | 信号名称 | 说明 |
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 快捷键。本信号不能被阻断。 |
二、进程管理:kill 命令
### --- kill 命令
[root@localhost ~]# kill [信号] PID // kill后面只能跟ID号 #-1重启,-9强制终止
### --- 例子1:杀死进程
[root@server11 ~]# ps aux |grep httpd
apache 14945 0.0 0.1 232476 3164 ? S 21:03 0:00 /usr/sbin/httpd -DFOREGROUND
[root@server11 ~]# kill -9 14945
[root@server11 ~]# ps aux |grep httpd // 查看不到杀死的进程
### --- 例 2:使用“-1”信号,让进程重启
~~~ 使用“-1(数字一)”信号,让 httpd 的主进程重启动。
[root@localhost ~]# kill -1 2246
### --- 例 3:使用“-19”信号,让进程暂停。
[root@localhost ~]# vi test.sh
~~~ 使用 vi 命令编辑一个文件,不要退出
~~~ 换一个不同的终端,查看下这个这个进程的状态。进程状态是 S(休眠)和+(位于后台),
~~~ 因为是在另外一个终端运行的命令
[root@localhost ~]# ps aux | grep "vi" | grep -v "grep"
root 2313 0.0 0.2 7116 1544 pts/1 S+ 19:20 0:00 vi test.sh
~~~ 使用-19 信号,让 PID 是 2313 的进程暂停。相当于在 vi 界面按“ctrl+z”快捷键。
[root@localhost ~]# kill -19 2313
~~~ 注意 2313 进程的状态,变成了 T(暂停)状态。
~~~ 这时我切换回 vi 的终端,发现 vi 命令已经暂停,又回到了命令提示符。
~~~ 不过 2313 进程就会卡在后台,如果想要恢复可以使用“kill -9 2313”强制终止进程,
~~~ 也可以利用 15.2 小节将要学习的工作管理来进行恢复。
[root@localhost ~]# ps aux | grep "vi" | grep -v "grep"
root 2313 0.0 0.2 7116 1580 pts/1 T 19:20 0:00 vi test.sh
三、进程管理:killall 命令
### --- killall命令
~~~ 选项:
~~~ -i:交互式,询问是否要杀死某个进程
~~~ -I:忽略进程名的大小写
[root@localhost ~]# killall [选项][信号] 进程名
### --- 杀死httpd
~~~ 交互式杀死 httpd 进程
~~~ 查询系统有 3 个 sshd 进程。1733 是 sshd 服务的进程,
~~~ 1735 和 1758 是我的两个远程连接的进程。
[root@server11 ~]# ps aux | grep "httpd" | grep -v "grep"
root 15138 0.0 0.2 230392 5184 ? Ss 21:20 0:00 /usr/sbin/httpd -DFOREGROUND
apache 15139 0.0 0.1 232476 3164 ? S 21:20 0:00 /usr/sbin/httpd -DFOREGROUND
apache 15140 0.0 0.1 232476 3164 ? S 21:20 0:00 /usr/sbin/httpd -DFOREGROUND
apache 15141 0.0 0.1 232476 3164 ? S 21:20 0:00 /usr/sbin/httpd -DFOREGROUND
apache 15142 0.0 0.1 232476 3164 ? S 21:20 0:00 /usr/sbin/httpd -DFOREGROUND
apache 15143 0.0 0.1 232476 3164 ? S 21:20 0:00 /usr/sbin/httpd -DFOREGROUND
~~~ 查询系统有5 个 httpd 进程。15138 是 httpd 服务的进程,
~~~ 15139 和 15140 等式工作进程
[root@server11 ~]# killall -9 httpd
[root@server11 ~]# ps aux | grep "httpd" | grep -v "grep"
[root@localhost ~]# killall -i httpd
[root@server11 ~]# killall -i httpd
Kill httpd(15267) ? (y/N) y // 杀死主进程
Kill httpd(15268) ? (y/N) y // httpd的主进程死亡后,工作进程也会随之死亡
httpd(15268): No such process
### --- 杀死sshd
~~~ 交互式杀死 sshd 进程;提出除自己以外的其它终端。
~~~ 查询系统有 3 个 sshd 进程。1733 是 sshd 服务的进程,
~~~ 1735 和 1758 是我的两个远程连接的进程。
[root@server11 ~]# ps aux | grep "sshd" | grep -v "grep"
root 948 0.0 0.2 112796 4328 ? Ss 15:33 0:00 /usr/sbin/sshd -D
root 13207 0.0 0.3 163484 6056 ? Ss 18:24 0:00 sshd: root@pts/1
root 14710 0.0 0.3 163480 6112 ? Ss 20:48 0:00 sshd: root@pts/0,pts/2,pts/3
~~~ 交互式杀死 sshd 进程
~~~ 杀死 sshd(1733) ? (y/N) n
~~~ 这个进程是 sshd 的服务进程,如果杀死,所有的 sshd 连接都不能登录。
~~~ 杀死 sshd(1735) ? (y/N) n
~~~ 这是我当前登录终端,不能杀死我自己吧!
~~~ 杀死 sshd(1758) ? (y/N) y
~~~ 把另外一个 sshd 登录终端踢出。
[root@server11 ~]# kill -i sshd
四、进程管理:pkill 命令
~~~ pkill 命令和 killall 命令非常类似,也是按照进程名来杀死进程。格式如下:
~~~ 选项:
~~~ -t 终端号: 按照终端号踢出用户
[root@localhost ~]# pkill [选项] [信号] 进程名
[root@server11 ~]# w
21:32:42 up 6:01, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.10.10.240 20:48 2.00s 0.18s 0.00s w
root pts/1 10.10.10.240 18:19 3:01m 0.04s 0.04s -bash
root pts/2 10.10.10.240 21:29 3:20 0.03s 0.03s -bash
~~~ 强制杀死从 pts/1 虚拟终端登录的进程
[root@server11 ~]# pkill -t -9 pts/1
[root@server11 ~]# w
21:33:49 up 6:02, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.10.10.240 20:48 5.00s 0.19s 0.00s w
root pts/2 10.10.10.240 21:29 45.00s 0.03s 0.03s -bash
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
cdv006-system
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」