求助:linux下自己写的程序Ctrl+C无法停止的问题

wendy1116 2007-08-16 09:40:44
自己写了一个类连接数据库的。然后在另外一个文件里使用这个类。
需要用到死循环,如果不使用这个类,循环一切正常,按ctrl + C可以终止程序
但是一旦用了这个类,程序运行仍然一切正常,只是ctrl + C就完全没有了反应。
只能在另外一个终端里kill才行。
(这个类已经单独做过测试没有问题,只是不明白为什么放到整个系统里就出这样的问题了……)
希望高手能够帮忙!
...全文
2894 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
chicony 2007-08-29
  • 打赏
  • 举报
回复 1
ctrl+c信号被进程捕获了,按下ctro+|试试,或在另一个终端给这个进程发SIGINT信号看看。
  • 打赏
  • 举报
回复
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
  • 打赏
  • 举报
回复
可能还是死循环导致的问题,整个信号不断放到了系统的消息队列中。。。
一直排队进行。。。
具体要看你的处理了?

23,116

社区成员

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

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