当有部分进程由于某种原因已经死掉或工作异常,或者要停止一些非关键或非数据业务的进程,那么就需要使用kill或者killall命令。这些命令实现的原理是向内核发送一个系统操作信号以及某个进程的标识号,使得内核对指定标识号的进程进行相应的操作。
1.kill命令
kill命令的语法:
kill [信号代码] 进程ID
查找进程的进程号一般使用ps命令,例如:
ps -ef|grep mysqld
用该命令查的时候,会发现由若干个mysql进程,但其实主进程只有一个那就是pid为2222,其他都是主进程的子进程。
但linux提供了一个更便捷的命令:pidof,只返回主进程pid
pidof mysqld
kill命令后面的信号代码有64种,使用kill -l可以查看。但使用的最多的就三种:1,9和15,分别代表重启,强行杀掉和正常结束。
- 在使用kill -1时,重启进程的时候实际上是不会改变主进程的pid,而子进程会改变。这就是说发生了原地重启,或者叫软重启。
- kill -9:在有一些进程因为运行中出现问题而无法通过正常方式停止的,便可使用该信号代码。其意义是立即杀死进程,而且该信号无法被阻塞或者忽略。但是缺点是进程直接被系统终止,而没有清理之前申请的内存,会造成一定程度上的‘内存泄漏’。
- kill -15:linux默认的程序中断信号,它也会使进程正常退出。
2.killall命令
kill命令操作的对象是进程的pid,因此想要杀掉一个进程,首先要知道pid,但若pid查找错误,错杀了更重要的进程,那将会非常麻烦。而killall,使用的是进程名字而不是PID,该命令更简单且安全,使用的语法如下:
killall mysqld