c++ - 注销时应用程序不会退出

标签 c++ linux qt signals

我想问一下用户注销时调用的信号是什么?我有一个 Qt gui 应用程序,它具有 SIGTERMSIGHUP 信号的处理程序。该应用程序还有自己的关闭事件处理程序,因此用户无法通过单击“X”来关闭它。问题是,当用户注销时,ubuntu 会挂起(任务栏上的图标消失,但进程继续运行)并且不允许用户注销,因为(imo)它等待进程终止。当我使用 kill -15 'myapp' 命令时,应用程序会按预期正常关闭,因此问题不应出现在我的处理程序中。

static int setupHandlers(){
    struct sigaction hup,term;

    hup.sa_handler = signalHandler;
    sigemptyset(&hup.sa_mask);
    hup.sa_flags = 0;

    if (sigaction(SIGHUP, &hup, 0) > 0){
       return 1;
    }

    term.sa_handler = signalHandler;
    sigemptyset(&term.sa_mask);

    if (sigaction(SIGTERM, &term, 0) > 0){
        return 2;
    }

    return 0;
}

signalHandler 只是调用 exit(0) (也尝试过 _exit(0)abort())

最佳答案

您可以处理 3 个标准终止信号 - SIGINT、SIGQUIT 和 SIGTERM。尝试订阅其中的每一个并查看。

关于c++ - 注销时应用程序不会退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27038977/

相关文章:

c++ - boost::ptree 和 KeyCompare 函数?

c++ - 如何在 C++ xcode 项目中使用动态共享库?

c++ - 如何移动双向链表中的元素?

c++ - Qt QLinkedList 对象追加问题

c++ - 我可以使用 Visual C++ 开发跨平台桌面应用程序吗?

c++ - Qt: connect() 需要至少 4 个参数,但提供了 2 个

linux - 如何启动 Geoserver 的 Linux init 脚本服务

linux 中的 java 服务器 cpu 使用监视器

linux - 如何将文件夹中的文件列表发送到Linux中的txt文件

c++ - QT 自定义 TreeView