程序僵死的问题

发布于 2022-07-22 12:47:53 字数 446 浏览 17 评论 7

一个程序僵死用ps aux观察的时候是否是显示Z
这个是正常的情况:
root      1555  0.0  0.0  1604  644 ?        S    05:05   0:00 server
下面是僵死的情况
root      1555  0.0  0.0  1604  644 ?        Z    05:05   0:00 server
不知我说的是不是正确的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

像你 2022-07-22 18:40:46

R    Running or runnable (on run queue)
这就说明程序没有僵死了
谢谢楼主的耐心回复

留蓝 2022-07-22 18:40:27

这个时候你 最需要的是man手册

PROCESS STATE CODES
Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") will display to describe
the state of a process.
D    Uninterruptible sleep (usually IO)
R    Running or runnable (on run queue)
S    Interruptible sleep (waiting for an event to complete)
T    Stopped, either by a job control signal or because it is being traced.
W    paging (not valid since the 2.6.xx kernel)
X    dead (should never be seen)
Z    Defunct ("zombie") process, terminated but not reaped by its parent.

雨后咖啡店 2022-07-22 18:38:13

root     12975  0.0  0.1  3736 1112 ?        S    15:38   0:00 radiusdAcct -d /billing
root     12976  3.6  0.1  4640 1252 ?        R    15:38   2:54 radiusdAcct -d /billing
今天有出现这样的问题,这是个radius的一个分支模块,其中的R是代表什么意思?
当时12976没响应.

我不吻晚风 2022-07-22 18:22:57

你可以让父进程忽略子进程的退出状态,如果忽略则父进程无须理会子进程的退出状态.
否则,子进程退出后,而父进程尚在的时候,那么父进程应该处理子进程的退出状态 也就是调用wait和waitpid,如果不调用的话,那么就会出现僵尸进程.
如果子进程退出的时候,其创建它的父进程早已退出了,那么操作系统将该子进程的对应的父进程的ppid改为1,也就是退出状态不用你去理会了,可以由1号进程init负责回收.

一般的情况是父进程里注册一个处理SIGCHLD信号的函数,然后由该函数处理子进程的退出状态,这样的方式可以不影响父进程的继续执行,是异步的.
至于子进程所打开的文件描述符的一类东西,是在子进程退出后,由操作系统负责回收,这个和父进程无关,

落花浅忆 2022-07-22 17:49:59

谢谢版主的回复!
也就是说一个父进程必须要获得他的子进程状态,否则就会导致僵死了
一个进程fork了一个子进程,他们共享同一文件位移量,如果fork之后父子
进程各自执行不同的程序段,各自关闭他们不需要的文件描述符,并且不干扰
对方使用的文件描述符.那么父进程还要关心子进程的状态吗?是不是还用wait(),
或waitpid()呢?子进程还会不会僵死呢?
最进被fork弄晕了,望大家赐教!

岁月无声 2022-07-22 17:12:29

这个是因为你父进程没有wait 或waitpid 或忽略子进程的退出状态.

泛泛之交 2022-07-22 14:27:18

root     24905  0.1  0.0     0    0 ?        Z    20:33   0:00 [bash <defunct>]
root     24906  0.3  0.0     0    0 ?        Z    20:33   0:00 [bash <defunct>]
不知这个中的Z代表什么意思?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文