QProcess无法终止程序求助:调用terminate/kill均无效
问题分析与解决方案
你的代码里的QProcess pro是局部变量,当前函数执行完毕后,这个对象就会被销毁释放。3秒后定时器触发时,&pro指向的内存已经无效,调用terminate或kill自然不会起作用。
可行解决方案:
将QProcess改为堆分配对象:
QProcess *pro = new QProcess; pro->start("Notepad"); // 定时器触发后,终止进程并释放对象,避免内存泄漏 QTimer::singleShot(3000, pro, [pro](){ pro->terminate(); pro->waitForFinished(); delete pro; });将QProcess设为类成员变量:
如果这段代码在类的成员函数里,直接把QProcess pro声明为类的成员变量,这样它的生命周期和类实例一致,定时器触发时对象依然有效:// 类头文件中声明 class YourClass : public QObject { Q_OBJECT private: QProcess m_pro; }; // 成员函数中使用 m_pro.start("Notepad"); QTimer::singleShot(3000, &m_pro, &QProcess::terminate);使用智能指针管理生命周期:
用QSharedPointer托管QProcess,确保定时器触发时对象仍存在:auto pro = QSharedPointer<QProcess>::create(); pro->start("Notepad"); QTimer::singleShot(3000, pro.get(), [pro](){ pro->kill(); });
额外提醒:调用terminate后可以加上waitForFinished(),确保进程彻底退出,避免残留进程。
内容的提问来源于stack exchange,提问作者user18126130
相关产品推荐
相关产品推荐

