【问题标题】:setsid() after fork() can't generate a core dumpfork() 之后的 setsid() 无法生成核心转储
【发布时间】:2015-12-09 09:55:40
【问题描述】:

为了运行程序,我写了一个shell:

#!/bin/bash
ulimit -c unlimited
ulimit -n 65535
/usr/local/bin/myprogram -D #-D here means run in daemon 

当我运行命令时:kill -3 pid。 它不会生成核心转储文件。 在我从 shell 中删除“-D”(注意:程序不会在守护进程中运行)并运行命令“kill -3 pid”后,它将生成核心转储。

我猜这可能是由终端会话 id 引起的。

我应该如何在守护进程中运行生成核心转储?

分叉代码为:

void Daemonize()
{
    pid_t pid, sid;
    pid = fork();
    if (pid < 0) 
    {
        //Fork error
        exit(EXIT_FAILURE);
    } 
    else if (pid == 0)
    {
        //Child
        char *daemondir;
        umask(027);
        sid = setsid();//it's this cause that can't generate core dump 
        if (sid < 0)
            exit(EXIT_FAILURE);
        dosomething();
        ...
    }
    //Parent exits
    exit(EXIT_SUCCESS);
}

【问题讨论】:

    标签: linux fork coredump


    【解决方案1】:

    setsid 并不意味着核心转储不生成。

    我在我的环境内核 3.10 x86_64 上测试你的代码。在我的环境中,它总是在当前目录中生成核心转储。

    检查生成核心转储的目录。

    您可能需要更改 [/proc/sys/kernel/]core_pattern 以更改目录。

    【讨论】:

      猜你喜欢
      • 2013-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 2023-03-27
      • 2011-12-05
      • 1970-01-01
      相关资源
      最近更新 更多