社区
Linux/Unix社区
帖子详情
求助:linux下自己写的程序Ctrl+C无法停止的问题
wendy1116
2007-08-16 09:40:44
自己写了一个类连接数据库的。然后在另外一个文件里使用这个类。
需要用到死循环,如果不使用这个类,循环一切正常,按ctrl + C可以终止程序
但是一旦用了这个类,程序运行仍然一切正常,只是ctrl + C就完全没有了反应。
只能在另外一个终端里kill才行。
(这个类已经单独做过测试没有问题,只是不明白为什么放到整个系统里就出这样的问题了……)
希望高手能够帮忙!
...全文
2894
13
打赏
收藏
求助:linux下自己写的程序Ctrl+C无法停止的问题
自己写了一个类连接数据库的。然后在另外一个文件里使用这个类。 需要用到死循环,如果不使用这个类,循环一切正常,按ctrl + C可以终止程序 但是一旦用了这个类,程序运行仍然一切正常,只是ctrl + C就完全没有了反应。 只能在另外一个终端里kill才行。 (这个类已经单独做过测试没有问题,只是不明白为什么放到整个系统里就出这样的问题了……) 希望高手能够帮忙!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chicony
2007-08-29
打赏
举报
回复
1
ctrl+c信号被进程捕获了,按下ctro+|试试,或在另一个终端给这个进程发SIGINT信号看看。
路漫漫其修远.
2007-08-17
打赏
举报
回复
ctrl+break 呢
wendy1116
2007-08-17
打赏
举报
回复
我按多少次都没有用啊。
而且即使我的程序已经把跟数据库的连接断开了
也还是无法终止
反正就是一旦程序连接过数据库,就再也不能通过ctrl+c终止了,只能kill
ckc
2007-08-17
打赏
举报
回复
这个是oracle的问题,我用gcc写pro*c的程序,操作817的oracle,也是类似的问题
ctrl-c并不是没有作用,ctrl-c实际上对数据库的操作是起作用的
比如正在select count(*) from b 的时候你按下ctrl-c
这条语句实际上就中断了,返回结果是0
我有个程序也是无限循环,只好在程序中判断查询出错的时候退出程序
多按几次ctrl-c就可以退出了
cceczjxy
2007-08-17
打赏
举报
回复
应该是连接数据库时屏蔽或则阻塞了信号吧
wendy1116
2007-08-17
打赏
举报
回复
Ctrl+D也不行啊
反正就是一旦用了Environment::createEnvironment (Environment::DEFAULT);和env->createConnection (username, password, dburl);即使后来把连接断开了,也还是无法停止……
wendy1116
2007-08-17
打赏
举报
回复
自己解决了。
暂时用signal,定义了自己的信号处理函数来退出程序……
只是我奇怪为什么在oracl的文档里,说了oracle对这些信号的捕获是在连接断开之后就自动消除了,而我的程序明明断开连接了,还是无法捕获到ctrl+c……
wendy1116
2007-08-16
打赏
举报
回复
嗯,刚才对程序进行了修改,发现是这样的:
一旦执行了下面连接数据库的语句
try
{
this->env = Environment::createEnvironment (Environment::DEFAULT);
this->conn = env->createConnection (username, password, dburl);
}
catch(SQLException ex)
{
cout<<"Error number: "<<ex.getErrorCode()<<endl;
cout<<ex.getMessage()<<endl;
this->exStr = ex.getMessage();
return false;
}
cout<<"Connected to "<<dburl<<endl;
之后,写一个while(1);空循环,程序就不能ctrl+c终止……
hzcpig
2007-08-16
打赏
举报
回复
对数据库操作不十分了解,不过按你的测试,肯定是与数据库有关的~~~~
帮顶
wendy1116
2007-08-16
打赏
举报
回复
现在的问题是这样的:如果我这个类,把跟数据库操作有关的语句去掉,就没有问题,仍然可以按ctrl+c停止
但是一旦调用了这个类里面有关数据库操作的方法,那么程序就终止不了……
是不是跟oracle数据库事务处理有关?
dai_weitao
2007-08-16
打赏
举报
回复
应该是那个类里面屏蔽了Ctrl+C的信号吧.
你用Ctrl+D应该可以终止.试试
wendy1116
2007-08-16
打赏
举报
回复
那为什么只要我不使用连接数据库的类就没有问题呢?
一旦使用了这个类,就停止不了了……
jufeng2309
2007-08-16
打赏
举报
回复
可能还是死循环导致的问题,整个信号不断放到了系统的消息队列中。。。
一直排队进行。。。
具体要看你的处理了?
Linux
基础
一、常用操作以及概念快捷键Tab:命令和文件名补全;
Ctrl
+C:中断正在运行的
程序
;
Ctrl
+D:结束键盘输入(End Of File,EOF)
求助
1. --help指令的基本用法与选项介绍。2. manman 是 manual 的缩
写
,将指令的具体信息显示出来。当执行 man date 时,有 DATE(1) 出现,其中的数字代表指令的类型,常用的数字及其类型如下: 代号 类型 1...
Linux
笔记
一、常用操作以及概念 快捷键 Tab:命令和文件名补全;
Ctrl
+C:中断正在运行的
程序
;
Ctrl
+D:结束键盘输入(End Of File,EOF)
求助
1. --help 指令的基本用法与选项介绍。 2. man man 是 manual 的缩
写
,将指令的具体信息显示出来。 当执行 man date 时,有 DATE(1) 出现,其中的数字代表指令的类型,常用的数字及其类型如下: 代号 类型 1 用户在 shell 环境中可以操作的指令或者可执行文件 5 配置文件 8
linux
操作系统下c语言编程入门
2)
Linux
程序
设计入门--进程介绍 3)
Linux
程序
设计入门--文件操作 4)
Linux
程序
设计入门--时间概念 5)
Linux
程序
设计入门--信号处理 6)
Linux
程序
设计入门--消息管理 7)
Linux
程序
设计入门--线程操作 8)
Linux
程序
设计入门--网络编程 9)
Linux
下C开发工具介绍 1)
Linux
程序
设计入门--基础知识
Linux
下C语言编程基础知识 前言: ...
几率大的
linux
命令面试题(含答案)
1、显示日期与时间的命令:date 2、显示日历的命令:cal 3、简单好用的计算器:bc 4、热键“命令补全或文件补齐”:Tab 5、热键“中断目前
程序
”:
Ctrl
+C 6、热键“键盘输入结束(End of File)相当与输入exit”:
Ctrl
+D 7、在线
求助
:man 【command】或 info 【command】,按q退出 8、数据同步
写
入磁盘:sync 9、关机命令:shutdow...
linux
操作系统下c语言编程入门
发信人: Lerry (驴是的念来过倒·杏红等头墙上爬), 信区:
Linux
标 题:
linux
操作系统下c语言编程入门 发信站: 哈工大紫丁香 (Fri Dec 2 23:33:41 2005), 转信 (一)目录介绍 1)
Linux
程序
设计入门--基础知识 2)
Linux
程序
设计入门--进程介绍 3)
Linux
程序
设计入门--文件操作 4)
Linux
程序
设计入门--时间概
Linux/Unix社区
23,116
社区成员
74,507
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章