【发布时间】: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);
}
【问题讨论】: