在LINUX下,我直接CTRL+C退出程序,类的析构并没有执行,为什么啊?

wj025 2008-01-18 10:06:55
怎样让程序在异常结束时,也执行析构函数.我想LINUX中是否有一种方法,可以在程序异常结束时,释放资源呢???
...全文
2266 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Army123 2008-01-24
  • 打赏
  • 举报
回复
捕捉信号!!!
悠悠长风 2008-01-18
  • 打赏
  • 举报
回复
肯定的捕捉一些信号,不用所有的SIGQUIT, SIGTERM, SIGPIPE等。
不过楼主你要是放的资源都有什么啊,
像内存,和信号量(只要不是系统的)都会随着你这个进程的结束,而销毁的
xinshuow 2008-01-18
  • 打赏
  • 举报
回复

当在终端按Crtl+c 时向当前进程发送信号: SIGINT
当在终端输入kill id 杀死一个进程时,发送信号: SIGTERM

下面这个程序时验证上面的含义, 我把 SIGINT 和SIGTERM 信号全部截获下来了,
此时这个程序通过ctrl+c 和kill 是杀不死的.

#include <signal.h>
#include <stdio.h>

void func1()
{
printf("SIGINT \n");
}
void func2()
{
printf("SIGTERM \n");
}
int main()
{
signal (SIGINT, func1);
signal ( SIGTERM, func2);
while(1);
}

/****************************************************/
杀死一个或者一系列进程,通常先尝试最小危险的信号 SIGTERM。那样,
关心按次序关机的程序得到设计来执行当收到类似清理关闭打开文件的 SIGTERM 信号。
如果你向一个进程发送一个 SIGKILL 信号,你就把进程在关闭前进行清理工作的机会给剥夺了,
可能造成意想不到的后果.
-- 插入 --
wj025 2008-01-18
  • 打赏
  • 举报
回复
我是想释放进程建立的系统核心资源(比如:信号量).
是否必须要通过捕捉信号来释放啊?那要捕捉所有的信号啊?
是否有好点的方法啊?
yecheng_110 2008-01-18
  • 打赏
  • 举报
回复
CTRL+C的时候给进程发出SIGINT信号
如果你不对这个信号处理的话 默认的动作就是退出
如果你想在用户按下CTRL+C的时候作出相应的动作 就需要捕获这个信号并处理
进程结束时 进程占用的资源就会由操作系统释放
hanb99 2008-01-18
  • 打赏
  • 举报
回复
程序已经异常了,如果想作操作(执行析构函数),那么只能自已去捕捉这个异常,再执行。
CTRL+C不行,它应该是系统强制退出。
当程序结束时,会自动释放资源的

23,218

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧