linux 后台进程无法产生core文件

liuzhenhao123 2016-03-16 05:50:47
首先说一下我程序启动
sigset(SIGUSR1, vExitPoll);
sigset(SIGTERM, vExitPoll);
sigset(SIGSEGV, vExitPoll);
sigset(SIGINT, vExitPoll);
然后进入服务监听,然后多线程处理,在交互过程中 偶尔出现 段错误, 也就是信号11,
(SIGSEGV),但是无法产生core文件,导致很难定位问题。

请教大神,为什么无法产生core文件呢? 我其他设置ulimit -c 都是OK (unlimit),
进入单进程调试发现可以产生,现在我怀疑是不是我程序中用到某些函数导致,
首先想到是sigset,我将该函数全部屏蔽,但是结果也是一样。

help,help, 在线等
...全文
444 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
nswcfd 2016-03-25
  • 打赏
  • 举报
回复
$ cat core.c 
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

int flag;
void f(int nr)
{
	printf("sig nr=%d\n", nr);
	if (flag & 0x02)
		signal(SIGSEGV, SIG_DFL);
}

int main(int ac, char *av[])
{
	flag = atoi(av[1] ?: "");
	if (flag & 0x01)
		signal(SIGSEGV, f);
	*(int *)0 = 0;
	return 2;
}
比较一下flag=0/1/3的区别。
liuzhenhao123 2016-03-24
  • 打赏
  • 举报
回复
可以确定 绝对有的,还有代码中 并没有设置脱离终端函数,导致core文件没有在当前目录下产生
sunhainan 2016-03-21
  • 打赏
  • 举报
回复
确认下在执行文件该目录下是否有写权限

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧