程序僵死的问题
一个程序僵死用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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
R Running or runnable (on run queue)
这就说明程序没有僵死了
谢谢楼主的耐心回复
这个时候你 最需要的是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.
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没响应.
你可以让父进程忽略子进程的退出状态,如果忽略则父进程无须理会子进程的退出状态.
否则,子进程退出后,而父进程尚在的时候,那么父进程应该处理子进程的退出状态 也就是调用wait和waitpid,如果不调用的话,那么就会出现僵尸进程.
如果子进程退出的时候,其创建它的父进程早已退出了,那么操作系统将该子进程的对应的父进程的ppid改为1,也就是退出状态不用你去理会了,可以由1号进程init负责回收.
一般的情况是父进程里注册一个处理SIGCHLD信号的函数,然后由该函数处理子进程的退出状态,这样的方式可以不影响父进程的继续执行,是异步的.
至于子进程所打开的文件描述符的一类东西,是在子进程退出后,由操作系统负责回收,这个和父进程无关,
谢谢版主的回复!
也就是说一个父进程必须要获得他的子进程状态,否则就会导致僵死了
一个进程fork了一个子进程,他们共享同一文件位移量,如果fork之后父子
进程各自执行不同的程序段,各自关闭他们不需要的文件描述符,并且不干扰
对方使用的文件描述符.那么父进程还要关心子进程的状态吗?是不是还用wait(),
或waitpid()呢?子进程还会不会僵死呢?
最进被fork弄晕了,望大家赐教!
这个是因为你父进程没有wait 或waitpid 或忽略子进程的退出状态.
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代表什么意思?