【发布时间】:2014-02-25 20:09:10
【问题描述】:
我有一个在前台运行良好的多线程 Qt/C++ 应用程序,但是当它进行 dameonizes 时,它无法正常关闭。该进程仍然处于活动状态,但处于等待状态 - 请参阅等待程序的回溯:
(gdb) bt
#0 0x000000372460b575 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f8990fb454b in QWaitCondition::wait(QMutex*, unsigned long) ()
from /opt/Qt/5.1.1/gcc_64/lib/libQt5Core.so.5
#2 0x00007f8990fb3b3e in QThread::wait(unsigned long) () from /opt/Qt/5.1.1/gcc_64/lib/libQt5Core.so.5
#3 0x00007f8990fb0402 in QThreadPoolPrivate::reset() () from /opt/Qt/5.1.1/gcc_64/lib/libQt5Core.so.5
#4 0x00007f8990fb0561 in QThreadPool::waitForDone(int) () from /opt/Qt/5.1.1/gcc_64/lib/libQt5Core.so.5
#5 0x00007f89911a4261 in QMetaObject::activate(QObject*, int, int, void**) ()
from /opt/Qt/5.1.1/gcc_64/lib/libQt5Core.so.5
#6 0x00007f89911a4d5f in QObject::destroyed(QObject*) () from /opt/Qt/5.1.1/gcc_64/lib/libQt5Core.so.5
#7 0x00007f89911aa3ee in QObject::~QObject() () from /opt/Qt/5.1.1/gcc_64/lib/libQt5Core.so.5
#8 0x0000000000409d8b in main (argc=1, argv=0x7fffba44c8f8) at ../../src/main.cpp:27
(gdb)
我现在意识到我的代码首先创建了一个线程,然后分叉,以防万一。前台进程正常退出(确认PID没了),但后台pid永远不会结束。这可能与我在父级中创建 QThread 的事实有关吗?如果是这样,我该如何让这个等待的线程死掉?
如果没有,是否有特殊方法可以退出已被守护的控制台应用程序? (在 Qt 中)
【问题讨论】:
标签: qt process fork wait qthread