linux c程序 ctrl+c不能结束的原因

C语言 码拜 6年前 (2015-05-11) 384次浏览 0个评论
 

现在在linux环境下开发C程序

程序运行必要的处理后处于待机状态,什么都不做
大概20分钟内按ctrl + c可以正常结束程序,
超过20分钟后按ctrl + c程序不会结束,确认过有接收到ctrl + 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信号,默认操作是终结进程,如果自行安装了处理程序,那由用户负责处理
引用 1 楼 cjqpker 的回复:

你程序有捕获Ctrl C信号么,捕获之后自己做清理工作,然后退出程序。
遇到过一些程序Ctrl C当时不能退出,过个几秒钟就可以了。

有捕获到,但就是不能退出。

引用 2 楼 u010868023 的回复:

在你的程序里 应该是有捕捉处理sigint的函数,看看是否卡在释放资源的那里

是有捕捉处理sigint的函数,如果是卡在释放资源的处理上,
20分钟以内和以后的处理没有任何差别,
20分钟内的话可以正常结束程序,这是我不能理解的地方。

引用 3 楼 zhao4zhong1 的回复:

检查是否资源泄漏的办法之一:
在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象
让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!

Linux下可以用top命令。

我有用top命令查看过,cpu和memory没有什么问题,
但没有试过循环执行。

你的意见很值得参考,谢谢!


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明linux c程序 ctrl+c不能结束的原因
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!