Tag: 僵尸进程

确保subprocess在退出Python程序时死亡

有没有办法确保在Python程序退出时所有创build的subprocess都已经死了? subprocess我的意思是用subprocess.Popen()创build的。 如果不是,我是否应该遍历所有发行的杀戮,然后杀死-9? 什么更干净?

在UNIX系统上杀死一个不存在的进程

我的系统上有一个不存在的进程: abc 22093 19508 0 23:29 pts/4 00:00:00 grep ProcA abc 31756 1 0 Dec08 ? 00:00:00 [ProcA_my_collect] <defunct> 如何在不重启机器的情况下杀死上述进程? 我曾尝试过 kill -9 31756 sudo kill -9 31756

如何杀死僵尸进程

我在前台(一个守护程序)启动了我的程序,然后用kill -9杀死了它,但是我得到了一个僵尸,我不能用kill -9杀死它。 如何杀死一个僵尸进程? 如果僵尸是一个死亡过程(已经死亡),我怎么把它从ps aux的输出中删除? root@OpenWrt:~# anyprogramd & root@OpenWrt:~# ps aux | grep anyprogram 1163 root 2552 S anyprogramd 1167 root 2552 S anyprogramd 1169 root 2552 S anyprogramd 1170 root 2552 S anyprogramd 10101 root 944 S grep anyprogram root@OpenWrt:~# pidof anyprogramd 1170 1169 1167 1163 root@OpenWrt:~# kill -9 1170 1169 1167 1163 […]

僵尸是否存在…在.NET中?

我正和一个队友讨论关于locking.NET的问题。 他是一个非常聪明的人,在低级和高级程序devise方面有着广泛的背景,但是他在低级程序devise方面的经验远远超过了我。 无论如何,他争辩说,为了避免“僵尸线程”崩溃系统的可能性很小,在可能的情况下尽可能在重负载的关键系统上应该避免使用.NETlocking。 我经常使用locking,我不知道什么是“僵尸线程”,所以我问。 我从他的解释中得到的印象是,僵尸线程是一个已经终止的线程,但是仍然保留了一些资源。 他给出了一个僵尸线程如何破坏系统的例子,线程在locking某个对象之后开始某个过程,然后在释放锁之前终止。 这种情况有可能导致系统崩溃,因为最终尝试执行该方法将导致线程全部等待访问永远不会返回的对象,因为使用locking对象的线程已经死亡。 我想我有这个要点,但是如果我离开了基地,请让我知道。 这个概念对我有意义。 我并不完全相信这是在.NET中可能发生的真实场景。 我以前从来没有听说过“僵尸”,但是我确实认识到,在较低层次深入工作的程序员往往对计算基础(比如线程)有更深的理解。 我确实看到locking的价值,然而,我看到许多世界级的程序员利用locking。 我也有限的能力来评估自己,因为我知道lock(obj)语句实际上只是语法糖: bool lockWasTaken = false; var temp = obj; try { Monitor.Enter(temp, ref lockWasTaken); { body } } finally { if (lockWasTaken) Monitor.Exit(temp); } 并且因为Monitor.Enter和Monitor.Exit被标记为extern 。 似乎可以想象的是,.NET会做一些处理来保护线程免受系统组件的影响,但这纯粹是一种猜测,可能仅仅是因为我从来没有听说过“僵尸线程”之前。 所以,我希望我能在这里得到一些反馈: 有没有比我在这里解释的“僵尸线”更清晰的定义? 僵尸线程可以发生在.NET上吗? (为什么?为什么不?) 如果适用,我如何强制在.NET中创build一个僵尸线程? 如果适用,如何在.NET中利用locking而不冒着僵尸线程的风险? 更新 两年前我问了一下这个问题。 今天这发生了: