多进程的问题,关闭进程时总会有一两个进程卡死,卡在sqlite3_close()那里

reer 2009-12-04 02:02:37
多进程的问题,关闭进程时总会有一两个进程卡死

多进程的程序,用到了sqlite3。

关闭时,使用自定义信号SIGUSR2来传送关闭信号,并在信号处理函数里关闭数据库。

问题是,使用“kill -12 主进程id”来关闭子进程和主进程的过程中,总会有一两个进程最后会卡死,并总是会在关闭数据库那里卡住,不知道是怎么回事?


进程的相关代码如下:
int main ()
{
...
signal (SIGUSR2, (void*)sig_handler);
...
}

void sig_handler(int sig)
{
...
switch(sig)
{
case SIGUSR2:
...
printf ( "# stop --------------- 01 \n ");
sqlite3_interrupt (db);
sqlite3_close (db); // 在这里卡死
printf ( "# stop --------------- 02 \n ");
...
}
...
}

对了,具体到代码里就是会执行“printf ( "# stop --------------- 01 \n ");”
但不执行“printf ( "# stop --------------- 02 \n ");”
...全文
274 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
iihero 2010-11-09
  • 打赏
  • 举报
回复
不要用signal, 尽量用sqlite的事务来解决。
另外,对某些sqlite的API,实行blocking方式调用,自己wrap一下就可以 了。
yunfeigege 2010-10-16
  • 打赏
  • 举报
回复
进程间有没有安全处理呢?sqlite只对线程时安全的,多进程的话可能死锁

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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