linux杀死进程命令kill,linux下杀死进程
一、死进程(僵尸进程)是什么?
在Linux系统上,如果进程已经终止,但是他的父进程还没有等他(调用wait/waitpid),他就会变成僵尸进程。当通过ps命令观察进程的执行状态时,可以看到这些进程的状态栏已经失效。僵尸进程是一个死进程,但是它仍然在进程表中占据一个位置。
但是,如果这个进程的父进程已经结束,它就不会成为僵尸进程。在每个进程结束时,系统会扫描当前系统上运行的所有进程,找出哪个进程是这个进程的子进程。如果是这样,Init进程将接管他并成为他的父进程。Init进程会自动等待子进程,所以Init继承的所有进程都不会变成僵尸进程。
二。Linux下的进程机制
每个Linux进程在进程表中都有一个入口点,核心进程在执行进程时使用的所有信息都存储在入口点中。通过ps命令查看系统中的进程信息,可以查看进程表中的相关数据。Fork))当系统调用创建新进程时,核心进程会在“进程表”中为新进程分配入口点,并将相关信息存储在入口点对应的进程表中。这些信息之一是父进程的标识符。
子进程的结束和父进程的执行是异步进程,父进程无法预测子进程何时结束。那么,是父进程太忙,子进程来不及等待,还是它不知道子进程什么时候结束,会导致子进程的状态信息丢失?
不会。因为Linux提供了一种机制,如果父进程想在最后知道子进程的状态信息,它可以获得这种机制。机制是子进程完成生命周期后,执行exit()系统调用,释放进程的所有资源,包括内核打开的文件和占用的内存。然而,进程号进程ID、结束代码退出代码、结束状态TerminationstatusoftProcess、执行时间theamountofputimetakenbytheprocess等。
也就是说,当进程死亡时,它并没有完全消失。该进程将终止并不再运行,但仍有数据等待父进程收集。父fork()终止子进程后,必须等待子进程终止(wait),或者waitpid)。这个wait()操作将导致子进程中的剩余数据丢失。
三。僵尸进程的危害
如果父进程不调用wait/waitpid,则保留的信息不会被释放,进程号将继续使用。然而,系统的进程表容量是有限的,并且可用的进程数也是有限的。如果出现大量僵尸进程,由于没有可用的进程号,系统将无法生成新的进程。
因此,失效的进程不仅会占用系统的内存资源,还会影响系统的性能,过多的进程会导致系统瘫痪。此外,因为调度程序不能选择失效的进程,所以不可能使用kill命令删除失效的进程。唯一的办法就是重启系统。
四。如何终止已失效的进程
失效的进程是指出非法损害的进程,父进程和子进程之间不会有通信。有时候会变成“僵尸进程”,会一直留在系统里,直到重启。您可以尝试清除“kill -9”命令,但大多数情况下您不会使用它。
为了终止这些失效的进程,您有两个选择:
1.重新启动计算机
2.继续阅读…
首先,让我们看看系统中是否有一个失效的进程:
$ ps -Agrep无效输出
5259?0:00:00 SD _ Cicero已失效12214 pts/1800336001336014 python已失效16989 pts/1800336004:43 python已失效20610 pthonded
$ PS-efgrep defunctmoreuid PID。=======================PS-ef more uid PID 0:00336000[SD _ Cicero]停用你的名字1221416336041 pts/100336001336014[Python]停用你的名字1698916989停用你的名字2061018940916336048 pts/1800034
PID:进程ID
PPID:父流程标识
使用命令“kill -9 12214”尝试杀死12214的进程可能没有效果。
试一试。
$ kill -9 12214$ ps -Agrep无效输出
5259?0:00:00 SD _ Cicero已失效12214 pts/1800336001336014 python已失效16989 pts/1800336004:43 python已失效20610 pthonded
要成功终止该进程,必须在父进程(12211)上运行kill命令($ kill -9 12211)。将kill命令应用于所有这些进程的父进程ID,并验证结果$ ps -A grep defunct。
试一试。
$ kill -9 12211$ ps -Agrep无效输出
5259?0336000336000 SD _西塞罗已失效16989 pts/1800336004336043 python已失效20610 pts/180033602:12 python已失效[1].
如果前面的命令没有结果,就处理它!否则,您可能需要重新启动系统。