我有一個多線程的Qt/C++應用程序,它在前臺工作得很好,但是當它不能正常關閉時會出現問題。該過程仍然活躍,但掛在等待看到的 - 看到等待程序的回溯:分叉(背景)Qt應用程序將無法正常退出
(gdb) bt
#0 0x000000372460b575 in [email protected]@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中)
我還沒有意識到這一點!你能指出一個關於不使用fork的鏈接,還有一個關於如何實現與QProcess相同的鏈接? (我也會檢查諾基亞文檔)謝謝 – TSG
這是一個相關的問題:http://stackoverflow.com/questions/21514446/get-pid-of-process-after-fork-in-qt – phyatt
@Michelle「鏈接「只是一個Qt源代碼。 'fork'不在測試用例的任何位置(perl測試執行程序代碼之外)。它沒有經過測試,因此期待它的可靠工作幾乎沒有問題。 –