Hi,大家好我是Tom,继上次分享之后这次给大家带来新的知识。
进程是Linux系统中一个非常重要的概念。Linux是一个多任务的操作系统,系统上经常同时运行着多个进程。我们不关心这些进程究竟是如何分配的,或者是内核如何管理分配时间片的,所关心的是如何去控制这些进程,让它们能够很好地为用户服务。
Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性。交互进程是由一个Shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。批处理进程和终端没有联系,是一个进程序列。监控进程(也称系统守护进程)时Linux系统启动时启动的进程,并在后台运行。例如,httpd是著名的Apache服务器的监控进程。
kill命令的工作原理是,向Linux系统的内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作。比如在top命令中,我们看到系统运行许多进程,有时就需要使用kill中止某些进程来提高系统资源。在讲解安装和登陆命令时,曾提到系统多个虚拟控制台的作用是当一个程序出错造成系统死锁时,可以切换到其它虚拟控制台工作关闭这个程序。此时使用的命令就是kill,因为kill是大多数Shell内部命令可以直接调用的。
作为测试我们不需要知道linux太过底层的知识,不过我们有时候需要查看服务进程是否正常,需要对进程进行操作,来辅助异常测试,所以以下命令对我们日常工作还是有很大帮助的,面试有时候也会问到,如果你能把进程概念说清楚+日常命令熟练掌握,那这部分就会成为你的加分项!
查看指定进程的基本信息
ps -ef | grep 进程名关键字
查看所有进程的状态
ps -aux
将进程暂停
kill -s 19 pid
将继续执行暂停的任务
kill -s 18 pid
将进程强制杀死
kill -s 9 pid
将进程杀死
kill -s 15 pid
中断
kill -s 2
退出
kill -s 3
killall命令杀死同一进程组内的所有进程。其允许指定要终止的进程的名称,而非PID
可以直接使用进程的名字而不是进程标识号
killall -HUP inetd
'''
这里要特别提醒大家注意的是:杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志。
'''
以优雅的方式结束进程
kill -l PID
-l选项告诉kill命令用好像启动进程的用户已注销的方式结束进程。当使用该选项时,kill命令也试图杀死所留下的子进程。但这个命令也不是总能成功--或许仍然需要先手工杀死子进程,然后再杀死父进程。
如果以上方法都不能解决你的问题,那么请继续看绝杀!!!
这个强大和危险的命令迫使进程在运行时突然终止,进程在结束后不能自我清理。危害是导致系统资源无法正常释放,一般不推荐使用,除非其他办法都无效。当使用此命令时,一定要通过ps-ef确认没有剩下任何僵尸进程。只能通过终止父进程来消除僵尸进程。如果僵尸进程被init收养,问题就比较严重了。杀死init进程意味着关闭系统。
如果系统中有僵尸进程,并且其父进程是init,而且僵尸进程占用了大量的系统资源,那么就需要在某个时候重启机器以清除进程表了。
综上所述,正常如果需要杀掉某个进程直接kill +PID进程名字就足够了,一定记得杀死附带的子进程不然留存僵尸进程,绝杀命令一定要慎重!!!