为什么QProcess没有杀死,关闭,终止调用进程的解构器?

时间:2012-11-30 06:40:14

标签: linux qt

我有一个看门狗停止功能放在我从C ++程序执行的进程的解构器中。每当我使用该过程QT GUI上的“X”按钮关闭时,它将通过我在解构器中放置的代码运行。但是当我尝试在我的C ++程序中执行Qprocesskill / close / terminate来终止进程时,解析器(进程中)中的代码没有被执行。有谁知道什么是错的或有其他方法来关闭这个过程?感谢!!!

btw im on linux。

2 个答案:

答案 0 :(得分:1)

当过程突然退出这些功能时,没有任何物体被拆除。它们等同于C函数出口(1)。尝试通过调用QApplication :: quit()来优雅地退出QApplication :: exec的事件循环,这将退出exec内部的主事件循环并允许main正常退出并允许在该点通常会自行销毁的所有对象执行此操作如此。

答案 1 :(得分:0)

使用std :: signal注册这些信号的处理程序(http://en.cppreference.com/w/cpp/utility/program/signal):

#include <csignal>
#include <iostream>

namespace
{
  volatile std::sig_atomic_t gSignalStatus;
}

void signal_handler(int signal)
{
  gSignalStatus = signal;
}

int main()
{
  // Install a signal handler
  std::signal(SIGINT, signal_handler);

  std::cout << "SignalValue: " << gSignalStatus << '\n';
  std::cout << "Sending signal " << SIGINT << '\n';
  std::raise(SIGINT);
  std::cout << "SignalValue: " << gSignalStatus << '\n';
}