多进程的问题,关闭进程时总会有一两个进程卡死,卡在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 ");”