linux 程序无缘无故推出 没有core文件 broken pipe Resource tem
?问题1. linux socket 服务端程序 无缘无故退出 。 2. 客户端大量访问服务端后,出现? Resource temporarily unavailable错误 问题分析:1. 是否有代码问题出现段错误 发现没有任何错误输出,查看(ulimit -a )并打开?(ulimit -c unlimited)?core输出? ?也没有core 文件产生。 后面发现,控制台 后台启动程序( nohup? ./xxx? &? )在程序退出的时候能看到退出原因? 此处我的server是http服务 我的问题 客户端访问服务端? 不等待服务端能响应完整, 直接断开。? 此处浏览器f5刷新程序实现。 2. 网上查找?Resource temporarily unavailable 相关问题 ps -T -p pid? 查看进程pid 有多少子进程 发现子进程都退出了。 最后,查找网络 发现应该是子线程回收问题,没有释放资源。 ? 解决:1.??SIGPIPE 信号的产生使进程退出了,所以在程序开始增加下面语句就可以 忽略管道类写错误, 因为我此处 tcp客户端关闭? 服务端没有对所有send做判断是? 会出现写错误 触发SIGPIPE,信号。 signal(SIGPIPE,SIG_IGN) 备注: 最好的解决方法还是 在每一个调用系统 读写的时候 都有有效的判断和处理。 ? 2.? 线程资源没有合理释放。? 下面代码在创建线程的时候设置线程为detached 脱离的,退出自动清理资源。 pthread_attr_t attr; ? 程序SIGPIPE退出 线程创建 http://www.cppblog.com/prayer/archive/2012/04/23/172427.html ? 转: http://www.cppblog.com/prayer/archive/2012/04/23/172427.html 这两天在看Pthread 资料的时候,无意中看到这样一句话(man pthread_detach): Either pthread_join(3) or pthread_detach() should be called for each thread 之后又查了pthread_join 但是没有明确说明必须调用pthread_join 或 pthread_detach. 但是再查了 Pthread for win32 pthread_join When a joinable thread terminates,its memory resources (thread descriptor and stack) are not deallocated until another thread performs pthread_join on it. Therefore,pthread_join must be called once for each joinable thread created to avoid memory leaks.
解决方法有三个: 下面是几个简单的例子 #include <stdio.h>#include <stdlib.h>#include <pthread.h>void *PrintHello(void){int stack[1024 * 20] = {0,};//sleep(1);long tid = 0;//pthread_exit(NULL);//pthread_detach(pthread_self());}int main (int argc,char *argv[]){pthread_t pid;int rc;long t;while (1) {printf(“In main: creating thread %ldn”,t);rc = pthread_create(&pid,NULL);if (rc){printf(“ERROR; return code from pthread_create() is %dn”,rc);//exit(-1);}pthread_join(pid,NULL);sleep(1);}printf(” n— main End —- n”);pthread_exit(NULL);} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |