在某些时候,许多脚本似乎无缘无故地挂起。手动运行它们仍然有效。我把范围缩小到了一个ps -ef
挂起的地方。经过一番处理后,输出就停止了。
运行strace ps -ef
给出了很多输出,最后是:
close(6) = 0
openat(AT_FDCWD, "/proc/27306/status", O_RDONLY) = 6
read(6, "Name:\tansible-playboo\nState:\tZ ("..., 2048) = 784
close(6) = 0
openat(AT_FDCWD, "/proc/27306/cmdline", O_RDONLY) = 6
read(6, "", 131072) = 0
close(6) = 0
write(1, "ansible 27306 26822 0 02:01 ? "..., 76ansible 27306 26822 0 02:01 ? 00:00:08 [ansible-playboo] <defunct>
) = 76
newfstatat(AT_FDCWD, "/proc/27308", {st_mode=S_IFDIR|0555, st_size=0, ...}, 0) = 0
openat(AT_FDCWD, "/proc/27308/stat", O_RDONLY) = 6
read(6, "27308 (ansible-playboo) D 26822 "..., 2048) = 311
close(6) = 0
openat(AT_FDCWD, "/proc/27308/status", O_RDONLY) = 6
read(6, "Name:\tansible-playboo\nUmask:\t002"..., 2048) = 1150
close(6) = 0
openat(AT_FDCWD, "/proc/27308/cmdline", O_RDONLY) = 6
read(6,
所以,我想,什么是ps 27308
? ps
又挂了。
顺便说一句:挂在这里意味着没有进一步的输出,不对信号做出反应(^c、^z 或kill
来自另一个终端;有时但并非总是忽略kill -9
)
所以,这个过程显然是我所有问题的原因。让我们kill -9 27308
以 root 身份。现在,kill
绞死了。
即使是正常的也shutdown -r now
行不通;我不得不shutdown -nr now
。
有谁知道一个流程如何进入如此混乱的状态?以前见过吗?如何防止这种情况发生?