现在在linux环境下开发C程序 程序运行必要的处理后处于待机状态,什么都不做 程序上也没有设置时间来控制是否结束,不知道为什么会在20分钟后发生这个现象。 哪位高人能指点一下,这种情况大概是什么原因造成的? |
|
你程序有捕获Ctrl C信号么,捕获之后自己做清理工作,然后退出程序。
遇到过一些程序Ctrl C当时不能退出,过个几秒钟就可以了。 |
|
10分 |
在你的程序里 应该是有捕捉处理sigint的函数,看看是否卡在释放资源的那里
|
20分 |
检查是否资源泄漏的办法之一:
在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象 让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏! Linux下可以用top命令。 |
5分 |
设置信号处理函数
void sighandle(int sig) { printf("捕获到信号%d", sig); /*释放资源*/ exit(0); } int main() { ..... signal(SIGINT, sighandle); //设置信号处理函数 ..... } |
5分 |
你是不是安装自己的信号处理程序了?cc信号,默认操作是终结进程,如果自行安装了处理程序,那由用户负责处理
|
有捕获到,但就是不能退出。 |
|
是有捕捉处理sigint的函数,如果是卡在释放资源的处理上, |
|
我有用top命令查看过,cpu和memory没有什么问题, 你的意见很值得参考,谢谢! |