昨天在写shell测试脚本,进行网口测试时,发现主进程已经结束了,
子进程却陷入了死循环。其原因是,在本该结束的时候,没有kill掉该进程,
当然也可以修改循环条件,但从code的简洁性来说,不推荐这么做。
至于僵尸进程,可问度娘,说的很详细。
kill -l将会列出所有信号.kill -9是"必杀"命令, 这个命令将会结束顽固的不想被kill掉的进程. 有时候kill -15也能干这个活. 一个"僵尸进程", 僵尸进程就是子进程已经结束了, 但是父进程还没kill掉这个子进程, 不能被登陆的用户kill掉 -- 因为你不能杀掉一些已经死了的东西 -- 但是init进程迟早会把它清除干净.
Tips:
killall命令将会通过名字来杀掉一个正在运行的进程, 而不是通过进程ID. 如果某个特定的命令有多个实例正在运行, 那么执行一次killall命令就会把这些实例全部杀掉.
append:
首先使用ps -ef命令确定要杀死进程的PID,然后输入以下命令:
# kill -pid
注释:标准的kill命令通常都能达到目的。终止有问题的进程,并把进程的资源释放给系统。然而,如果进程启动了子进程,只杀死父进程,子进程仍在运行,因此仍消耗资源。为了防止这些所谓的“僵尸进程”,应确保在杀死父进程之前,先杀死其所有的子进程。
-l选项告诉kill命令用好像启动进程的用户已注销的方式结束进程。当使用该选项时,kill命令也试图杀死所留下的子进程。但这个命令也不是总能成功--或许仍然需要先手工杀死子进程,然后再杀死父进程。
确定要杀死进程的PID或PPID
# ps -ef | grep httpd
以优雅的方式结束进程
# kill -l PID
8245

被折叠的 条评论
为什么被折叠?



