C叉没有退出

时间:2014-04-21 21:39:31

标签: c fork

我是C的新手,我编写了下面的代码,每隔10秒执行一些shell脚本(nsdc.sh)。由于某种原因,它多次调用shell脚本(在循环中)。似乎_exit没有被调用。任何人都可以向我解释这种行为吗?

#include "dynzone.h"

void
dynzone_run(struct nsd *nsd)
{
    while(1) {
        pid_t pid = fork();

        if(pid == -1) {
            log_msg(LOG_ERR, "fork zone reload failed");
        } else if(pid == 0) {
            /* CHILD */
            log_msg(LOG_NOTICE, "exec reload");

            if(system("/home/edns/jarno/v1/nsdc.sh reload") == -1) {
                printf("reload error: %s\n", strerror(errno));
            }

            _exit(1);
        }

        sleep(10);
    }
}

void
dynzone_spawn(struct nsd *nsd)
{
    pid_t pid;

    pid = fork();

    if(pid == -1) {
        log_msg(LOG_ERR, "fork dynzone failed");
    } else if(pid == 0) {
        /* CHILD */
        log_msg(LOG_NOTICE, "spawned dynzone");

        dynzone_run(nsd);

        /* ENOTREACH */
        exit(0);
    }

    /* PARENT */
    return;
}

提前致谢!

1 个答案:

答案 0 :(得分:1)

因此,在通常扣除并信任描述的所有方面之后,可能只有一条可能的执行路径,这会导致您的观察结果:

你的" nsdc.sh"脚本永远不会退出。

右?