谈谈守护进程与僵尸进程

谈谈守护进程与僵尸进程

ID:38685580

大小:25.50 KB

页数:5页

时间:2019-06-17

谈谈守护进程与僵尸进程_第1页
谈谈守护进程与僵尸进程_第2页
谈谈守护进程与僵尸进程_第3页
谈谈守护进程与僵尸进程_第4页
谈谈守护进程与僵尸进程_第5页
资源描述:

《谈谈守护进程与僵尸进程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、谈谈守护进程与僵尸进程分类: 技术分享2011-12-2111:00 2460人阅读 评论(8) 收藏 举报04年时维护的第一个商业服务就用了两次fork产生守护进程的做法,前两天在网上看到许多帖子以及一些unix书籍,认为一次fork后产生守护进程足够了,各有道理吧,不过多了一次fork到底是出于什么目的呢?进程也就是task,看看内核里维护进程的数据结构task_struct,这里有两个成员:viewplain1.struct task_struct {  2.    volatile long sta

2、te;  3.    int exit_state;  4.    ...  5.}  看看include/linux/sched.h里的value取值:viewplain1.#define TASK_RUNNING        0  2.#define TASK_INTERRUPTIBLE  1  3.#define TASK_UNINTERRUPTIBLE    2  4.#define __TASK_STOPPED      4  5.#define __TASK_TRACED       8  6

3、./* in tsk->exit_state */  7.#define EXIT_ZOMBIE     16  8.#define EXIT_DEAD       32  9./* in tsk->state again */  10.#define TASK_DEAD       64  11.#define TASK_WAKEKILL       128  12.#define TASK_WAKING     256  13.#define TASK_STATE_MAX      512  可以看到,

4、进程状态里除了大家都理解的running/interuptible/uninterruptible/stop等状态外,还有一个ZOMBIE状态,这个状态是怎么回事呢?这是因为linux里的进程都属于一颗树,树的根结点是linux系统初始化结束阶段时启动的init进程,这个进程的pid是1,所有的其他进程都是它的子孙。除了init,任何进程一定有他的父进程,而父进程会负责分配(fork)、回收(wait4)它申请的进程资源。这个树状关系也比较健壮,当某个进程还在运行时,它的父进程却退出了,这个进程却没有成为孤

5、儿进程,因为linux有一个机制,init进程会接管它,成为它的父进程。这也是守护进程的由来了,因为守护进程的其中一个要求就是希望init成为守护进程的父进程。如果某个进程自身终止了,在调用exit清理完相关的内容文件等资源后,它就会进入ZOMBIE状态,它的父进程会调用wait4来回收这个task_struct,但是,如果父进程一直没有调用wait4去释放子进程的task_struct,问题就来了,这个task_struct谁来回收呢?永远没有人,除非父进程终止后,被init进程接管这个ZOMBIE进程,

6、然后调用wait4来回收进程描述符。如果父进程一直在运行着,这个ZOMBIE会永远的占用系统资源,用KILL发任何信号量也不能释放它。这是很可怕的,因为服务器上可能会出现无数ZOMBIE进程导致机器挂掉。来看看内核代码吧。进程在退出时执行sys_exit(C程序里在main函数返回会执行到),而它会调用do_exit,do_exit首先清理进程使用的资源,然后调用exit_notify方法,将进程置为僵尸ZOMBIE状态,决定是否要以init进程做为当前进程的父进程,最后通知当前进程的父进程:kernel/

7、exit.cviewplain1.static void exit_notify(struct task_struct *tsk)  2.{  3.    int state;  4.    struct task_struct *t;  5.    struct list_head ptrace_dead, *_p, *_n;  6.  7.    if (signal_pending(tsk) && !tsk->signal->group_exit  8.        && !thread_group

8、_empty(tsk)) {  9.        /* 10.         * This occurs when there was a race between our exit 11.         * syscall and a group signal choosing us as the one to 12.         * wake up.  It could be that we are

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。