首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >waitpid -在哪些情况下WIFEXITED和WIFSIGNALED都为false?

问waitpid -在哪些情况下WIFEXITED和WIFSIGNALED都为false?
EN

Stack Overflow用户
提问于 2016-10-07 17:26:01
回答 1查看 2.1K关注 0票数 3

我使用Apache commons-daemon's jsvc在Linux上作为守护进程运行一个Java程序。

守护进程“随机”崩溃,只显示以下消息:

代码语言:javascript
复制
jsvc.exec error: Service did not exit cleanly

这是jsvc (in jsvc-unix.c line 1142)中代码的相关部分:

代码语言:javascript
复制
while (waitpid(pid, &status, 0) != pid) {
    /* Waith for process */
}

/* The child must have exited cleanly */
if (WIFEXITED(status)) {
    status = WEXITSTATUS(status);

    // Clean exit code...
}
else {
    if (WIFSIGNALED(status)) {
        log_error("Service killed by signal %d", WTERMSIG(status));
        /* prevent looping */
        if (laststart + 60 > time(NULL)) {
            log_debug("Waiting 60 s to prevent looping");
            sleep(60);
        }
        continue;
    }
    log_error("Service did not exit cleanly", status);
    return 1;
}

在哪种情况下,WIFEXITED和WIFSIGNALED都为false?在这种情况下,是否可以保证进程不会被杀死(被进程或Linux OOM杀手杀死)?

EN

回答 1

Stack Overflow用户

发布于 2016-10-07 17:37:02

WIFSTOPPED也存在,但只有在父进程是ptrace:ing子进程(或者使用不同的waitpid标志)时才有可能。

我认为最好的方法是打印状态,并查看sys/wait.h中的位。不过,很难做到这一点。许多信息都被塞进了这个int中,很难弄清楚。看起来您粘贴的代码已经尝试这样做了,但是忘记了格式字符串中的%d。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39913885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档