是假的.STATUS_DEAD状态与psutil.STATUS_ZOMBIE相同?



在python psutil模块中,我看到一个进程psutil的两个状态。STATUS_DEAD psutil.STATUS_ZOMBIE。需要了解两者的区别。我可以使用'kill -1'和'kill -3'命令模拟僵尸进程,但不能模拟死亡进程。

大家有什么想法吗?

它们与'psutil/_comm .py'中定义的不同:

STATUS_ZOMBIE = "zombie"
STATUS_DEAD = "dead"

但是如果您在5.9.0版本中搜索STATUS_DEAD,您可能会发现它们在某种意义上是相同的。

在'psutil/_psbsd.py'中显示STATUS_DEAD未在任何BSD平台上使用

# OPENBSD
# According to /usr/include/sys/proc.h SZOMB is unused.
# test_zombie_process() shows that SDEAD is the right
# equivalent. Also it appears there's no equivalent of
# psutil.STATUS_DEAD. SDEAD really means STATUS_ZOMBIE.
# cext.SZOMB: _common.STATUS_ZOMBIE,
cext.SDEAD: _common.STATUS_ZOMBIE,
cext.SZOMB: _common.STATUS_ZOMBIE,

在'psutil/_pslinux.py'中显示:

# See:
# https://github.com/torvalds/linux/blame/master/fs/proc/array.c
# ...and (TASK_* constants):
# https://github.com/torvalds/linux/blob/master/include/linux/sched.h
PROC_STATUSES = {
"R": _common.STATUS_RUNNING,
"S": _common.STATUS_SLEEPING,
"D": _common.STATUS_DISK_SLEEP,
"T": _common.STATUS_STOPPED,
"t": _common.STATUS_TRACING_STOP,
"Z": _common.STATUS_ZOMBIE,
"X": _common.STATUS_DEAD,
"x": _common.STATUS_DEAD,
"K": _common.STATUS_WAKE_KILL,
"W": _common.STATUS_WAKING,
"I": _common.STATUS_IDLE,
"P": _common.STATUS_PARKED,
}

状态对应linux的任务状态:

// https://github.com/torvalds/linux/blame/master/fs/proc/array.c
static const char * const task_state_array[] = {
/* states in TASK_REPORT: */
"R (running)",      /* 0x00 */
"S (sleeping)",     /* 0x01 */
"D (disk sleep)",   /* 0x02 */
"T (stopped)",      /* 0x04 */
"t (tracing stop)", /* 0x08 */
"X (dead)",     /* 0x10 */
"Z (zombie)",       /* 0x20 */
"P (parked)",       /* 0x40 */
/* states beyond TASK_REPORT: */
"I (idle)",     /* 0x80 */
};

因此,它们在linux中的区别是很明显的。什么是Linux上的"僵尸进程"?

在psutil中,如果您使用psutil.Popen()创建了一个进程p,那么杀死它。只要父进程没有被终止或者你没有调用p.wait(),该进程将始终保持"僵尸"状态。

相关内容

  • 没有找到相关文章

最新更新