Linux 为什么';QProcess kill、close、terminate调用进程的解构器? 我有一个看门狗停止函数,它放在我从C++程序中执行的进程的解构器中。每次我使用该进程QT GUI上的“X”按钮关闭时,它都会通过我放置在解构器中的代码运行。但是当我试图在我的C++程序中做一个qProcess杀死/关闭/终止进程时,解构器(进程)中的代码没有被执行。有人知道什么地方出了问题,或者有其他方法来结束这个过程吗?谢谢

Linux 为什么';QProcess kill、close、terminate调用进程的解构器? 我有一个看门狗停止函数,它放在我从C++程序中执行的进程的解构器中。每次我使用该进程QT GUI上的“X”按钮关闭时,它都会通过我放置在解构器中的代码运行。但是当我试图在我的C++程序中做一个qProcess杀死/关闭/终止进程时,解构器(进程)中的代码没有被执行。有人知道什么地方出了问题,或者有其他方法来结束这个过程吗?谢谢,linux,qt,Linux,Qt,顺便说一句,linux上的im。当进程突然退出这些函数时,没有对象被破坏。它们等价于C函数exit(1)。尝试通过调用QApplication::quit()优雅地退出QApplication::exec的事件循环,QApplication::quit()将退出exec内部的主事件循环,并允许main正常退出,并允许在该点上正常销毁自身的所有对象都这样做。使用std::signal为这些信号注册处理程序(): #包括 #包括 名称空间 { 挥发性标准:信号原子信号状态; } 无效信号处理器(in

顺便说一句,linux上的im。

当进程突然退出这些函数时,没有对象被破坏。它们等价于C函数exit(1)。尝试通过调用QApplication::quit()优雅地退出QApplication::exec的事件循环,QApplication::quit()将退出exec内部的主事件循环,并允许main正常退出,并允许在该点上正常销毁自身的所有对象都这样做。

使用std::signal为这些信号注册处理程序():

#包括
#包括
名称空间
{
挥发性标准:信号原子信号状态;
}
无效信号处理器(int信号)
{
gSignalStatus=信号;
}
int main()
{
//安装一个信号处理器
std::信号(SIGINT,信号处理器);

std::无法显示代码或它没有happen@user你能正确地大写你的问题吗?-“i”->“i”等等。“kill”和“terminate”听起来不像是一个优雅的应用程序关闭……实际上,“C”函数
exit
确实运行静态对象的析构函数(实际上是
atexit
处理程序,但静态对象的析构函数通常是这样连接的)。因此它更类似于
\u exit()
。当然,这不会使您的答案无效:优雅地退出循环:-)
#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';
}