我是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;
}
提前致谢!
答案 0 :(得分:1)
因此,在通常扣除并信任描述的所有方面之后,可能只有一条可能的执行路径,这会导致您的观察结果:
你的" nsdc.sh"脚本永远不会退出。
右?