linux suse11遇到的信号问题以及一个coredump,想请教各路大神
话就不多说,直接上问题。
1、信号问题:
fd_set rset;
FD_ZERO(&rset);
FD_SET(g_fdSocket, &rset);
//设置接收连接超时时间
struct timeval waitTime;
waitTime.tv_sec = 1;
waitTime.tv_usec = 0;
select(g_fdSocket + 1, &rset, NULL, NULL, &waitTime);
这一段代码,应该是会被阻塞,直到超时或者文件句柄g_fdSocket状态更新为对IO操作为ready。
本来工作也是正常的,但是假如我从控制台输入kill -15的时候,竟然会触发其终止阻塞。代码里面raise(15)与raise(8)却不会终止其阻塞。而且我代码里面如果使用了alarm闹钟,则闹钟时间到时也会终止其阻塞,而raise(SIGALRM)却不会终止。求解。
2、一个coredump的问题。一个网络多线程带信号处理的一个后台程序。我的程序运行得平常都很正常,但偶尔会coredump。用gdb查看堆栈信息的时候,却很郁闷的发现代码的最后一行运行在LOG("……");这样的代码行上,我怀疑日志出问题了,于是注释掉这句话,接着,花了很多遍重复,终于重现core的时候,发现更郁闷的事情发生了,core在了被注释掉的这句话的下一行。char mzchar[256];这样一个变量声明的语句上。错误的类型是11号信号段错误。coredump的这个方法是一个语法树里面的解析语法树的方法,因为一个表达式很长,语法树可能会层次很多,就是根树会调用这个方法去遍历解析他的儿子辈的。儿子当然也会调用这个方法去解析孙子辈分的,依次下去。这个方法是对象方法。还有一个信息就是这个coredump,我测很多遍,很大可能性是发生在程序退出的时候,被外部程序调用kill -9发送SIGKILL信号时发生的。我一直认为SIGKILL信号时不会发生coredump的。想请各路大神给点思路或者建议