linux killall 源代码,Linux 进程管理 kill、killall、pkill命令(示例代码)

Linux常用信号(进程间通信)

系统中可以识别的信号较多,我们可以使用命令"kill -l"或"man 7 signal"来查询。命令如下:

[[email protected] ~]# 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"、"9"、"15"这三个信号

信号代号信号名称说 明

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是用来杀死进程的命令。可以根据不同的信号,kill 命令可以完成不同的操作,默认信号是15,正常停止。kill 命令格式如下:

kill 命令是按照 PID 来确定进程的,所以 kill 命令只能识别 PID,而不能识别进程名。我们举几个例子来说明一下 kill 命令。

使用“-1”信号,让进程重启

使用“-19”信号,让进程暂停

killall命令:终止特定的一类进程

killall 命令不再依靠 PID 来杀死单个进程,而是通过程序的进程名来杀死一类进程。命令格式如下:

[[email protected] ~]# killall [选项] [信号] 进程名

选项:

-i:交互式,询问是否要杀死某个进程;

-l:忽略进程名的大小写;

杀死httpd进程

#启动RPM包默认安装的apache服务

[[email protected]~]# service httpd start

#查看httpd进程

[[email protected]~]# ps aux | grep "httpd" | grep -v "grep"root1600 0.0 0.2 4520 1696? Ss 19:42 0:00 /usr/local/apache2/bin/httpd -k start

daemon1601 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start

daemon1602 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start

daemon1603 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start

daemon1604 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start

daemon1605 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start

#杀死所有进程名是httpd的进程

[[email protected]~]# killallhttpd

#查询发现所有的httpd进程都消失了

[[email protected]~]# ps aux | grep "httpd" | grep -v "grep"

交互式杀死sshd进程

#查询系统中有3个sshd进程。1733是sshd服务的进程,1735和1758是两个远程连接的进程

[[email protected]~]# ps aux | grep "sshd" | grep -v "grep"root1733 0.0 0.1 8508 1008? Ss 19:47 0:00/usr/sbin/sshd

root1735 0.1 0.5 11452 3296? Ss 19:47 0:00 sshd: [email protected]/0root1758 0.1 0.5 11452 3296? Ss 19:47 0:00 sshd: [email protected]/1killall -i sshd

#这个进程是sshd的服务进程,如果杀死,那么所有的sshd连接都不能登陆

杀死sshd(1733)?(y/N)n

#这是当前登录终端,不能杀死我自己吧

杀死 sshd(1735)?(y/N)n

#杀死另一个sshd登陆终端

杀死 sshd(1758)?(y/N)y

pkill命令:终止进程,按终端号踢出用户

pkill 命令和 killall 命令非常类似,也是按照进程名来杀死进程的。命令格式如下:

[[email protected] ~]# pkill [选项] [信号] 进程名

选项:

-t 终端号:按照终端号踢出用户;

不过 pkill 命令可以按照终端号来踢出用户。不知道大家发现没有,刚刚通过 killall 命令杀死 sshd 进程的方式来踢出用户,非常容易误杀死进程,要么会把 sshd 服务杀死,要么会把自己的登录终端杀死。

所以,不管是使用 kill 命令按照 PID 杀死登录进程,还是使用 killall 命令按照进程名杀死登录进程,都是非常容易误杀死进程的。 具体命令如下:

#使用w命令査询本机已经登录的用户

[[email protected]~]# w

20:06:34 up 28 min, 3 users, load average: 0.00, 0.00, 0.00USER TTY FROM [email protected] IDLE JCPU PCPU WHAT

root ttyl- 19:47 18:52 0.01s 0.01s -bash

root pts/0 192.168.0.100 19:47 0.00s 0.09s 0.04s wroot pts/1 192.168.0.100 19:51 14:56 0.02s 0.02s -bash

#当前主机已经登录了三个root用户,一个是本地终端ttyl登录,另外两个是从192.168.0.100登陆的远程登录

#强制杀死从pts/9 -t pts/1#虚拟终端pts/w

20:09:09 up 30 min, 2 users, load average: 0.00, 0.00,0.00USER TTY FROM [email protected] IDLE JCPU PCPU WHAT

root ttyl- 19:47 21:27 0.01s 0.01s -bash

root pts/0 192.168.0.100 19:47 0.00s 0.06s 0.00s w

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值