在pthread里call这两个函数,行为很怪异,下面慢慢道来
今天出了一个core,gdb一看这个core是由exit调用引起的,该exit是在一个pthread中调用的,于是查了一些资料,写了一些测试例子,但还是不能很圆满地解释,因此发帖询问。
问题描述:在线程中,先调用了printf打印一个字符串,由于异常情况,传入的指针在合法的范围内没有0,因此printf可能访问越界了, printf之后是一个exit函数,exit执行时程序core dump了,原因猜测可能是printf越界导致exit销毁资源时访问越界,导致了core。于是修改程序,将exit改成_exit,本意是不让做资 源销毁,直接退出,但奇怪的事情发生了,程序不能退出,猜测原因是因为thread是用process来实现的,_exit导致主线程不知道子线程已经退 出,所以对主线程没有影响,程序不能退出。因此再写了一个简单程序测试exit的行为,代码大概如下:
void * thfn(void* para){
printf("exit ................./n " );
}
int main(){
for(; ; ){
pthread_t tid;
pthread_create(&tid,NULL,thfn,NULL)
}
}
程序会打印好几个exit...........之后才会退出,估计是pthread库实现的时候注册了atexit函数来处理,该函数的处理会有一些延 迟,因此打印了多个eixt..........,而_exit没法处理,因此_exit会导致程序继续运行,是这样的吗?或者有更详细的解释,谢谢。