找回密码
 注册
查看: 684|回复: 5

进程问题

[复制链接]
发表于 2005-5-20 09:08:56 | 显示全部楼层 |阅读模式
这是一个创建进程的函数,我的问题是:
1. 这个函数所创建的新进程是否是守护进程?正确吗?
2. 程序执行到default的时候,父进程执行了_exit(pid);后处于什么状态?是否被关闭了?或者根本就终止了,再也不会执行了呢?
3.
int f()
{
    int fd;
    pid_t pid;

    pid = fork();

    switch (pid) {
    case -1:
        return -1;
    case 0:
        break;
    default:
        _exit(pid);
    }

    if (setsid() == -1)
        return -1;
    chdir("/");
    fd = open(_PATH_DEVNULL, O_RDWR, 0);
    if (fd != -1) {
        dup2(fd, STDIN_FILENO);
        dup2(fd, STDOUT_FILENO);
        dup2(fd, STDERR_FILENO);
        if (fd > 2)
            close(fd);
    }
    return 0;
}
谢谢!
 楼主| 发表于 2005-5-20 09:38:40 | 显示全部楼层
会不会产生一个僵尸进程呢?
回复

使用道具 举报

发表于 2005-5-20 19:52:13 | 显示全部楼层
虽然父进程死掉了,但init进程会成为子进程的父进程,所以不会产生僵死进程。
回复

使用道具 举报

 楼主| 发表于 2005-5-21 09:25:47 | 显示全部楼层
是因为执行了setsid()所以成为子进程的父进程的吗?
但是如果原来的父进程先死掉呢?那么还没有执行setsid()的以前子进程就已经成为僵尸进程了.....
因为_exit(pid)先执行,父进程死掉;而 setsid()在其之后,根本不会执行吧?
这个是我自己的想法 ,还请指正!
       非常感谢.
回复

使用道具 举报

发表于 2005-5-21 11:39:45 | 显示全部楼层
你的daemon缺少一些对信号的处理,应该说是设计不良的daemon。在网上搜搜吧,太多的示例了。

如果父进程先死就不会产生zombie。init会接管。
如果子进程先死就会产生zombie,不过当父进程死后还是会由init接管的。

父进程死去后子进程还苟活就不存在zombie了。子进程会活得很好,直到死去并由init接管。
回复

使用道具 举报

 楼主| 发表于 2005-5-23 08:35:38 | 显示全部楼层
哦,谢谢firemoth和笑,我再好好看看   
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-2-8 17:48 , Processed in 0.021692 second(s), 16 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表