【问题标题】:How to kill process by process name in Qt如何在 Qt 中按进程名称杀死进程
【发布时间】:2012-07-08 08:20:29
【问题描述】:

我正在 Qt 中为 Windows 编写桌面应用程序。
我有 3 个进程的名称,如果它们正在运行,我想在我的应用程序开始时杀死它们。
最好的方法是什么?(使用进程名称获取进程的状态,如果它是打开的,则将其杀死)。

代码示例对我有很大帮助。 谢谢!

【问题讨论】:

标签: windows qt process


【解决方案1】:

您可以为此目的使用 Qpr​​ocess。 在你的应用程序开始时,做

Qprocess p;
p.start("pkill processname1");
p.waitForFinished();
p.start("pkill processname2");
p.waitForFinished();
p.start("pkill processname2");
p.waitForFinished();

或者你可以直接使用系统调用..

system("pkill processname1");
system("pkill processname2");
system("pkill processname3");

在Windows环境下,可以使用以下命令杀死进程

process -k “Process ID”
process -k “Process Name”

您可以阅读更多这些here

【讨论】:

  • 谢谢,命令 pkill 也可以在 Windows 中使用?是不是比原生的win32 api更好
  • 使用WIN32 API会更好吗?如果是,为什么?
  • 'pkill' is not recognized as an internal or external command, operable program or batch file.
  • 'process' is not recognized as an internal or external command, operable program or batch file.
【解决方案2】:

Windows下使用taskkill命令 你可以调用它

QProcess::execute("taskkill /im <processname> /f");

或者

system("taskkill /im <processname> /f");

【讨论】:

    【解决方案3】:

    QT 不提供任何 API 来杀死不是由您的 QT 项目创建的进程。如果您在 Windows 上,您可以尝试按照here 解释的代码

    #include <windows.h>
    #include <process.h>
    #include <Tlhelp32.h>
    #include <winbase.h>
    #include <string.h>
    void killProcessByName(const char *filename)
    {
        HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
        PROCESSENTRY32 pEntry;
        pEntry.dwSize = sizeof (pEntry);
        BOOL hRes = Process32First(hSnapShot, &pEntry);
        while (hRes)
        {
            if (strcmp(pEntry.szExeFile, filename) == 0)
            {
                HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, 0,
                                              (DWORD) pEntry.th32ProcessID);
                if (hProcess != NULL)
                {
                    TerminateProcess(hProcess, 9);
                    CloseHandle(hProcess);
                }
            }
            hRes = Process32Next(hSnapShot, &pEntry);
        }
        CloseHandle(hSnapShot);
    }
    int main()
    {
        killProcessByName("notepad++.exe");
        return 0;
    }
    

    【讨论】:

      【解决方案4】:

      如何运行应用程序

      bool ok = QProcess::startDetached("C:\\TTEC\\CozxyLogger\\CozxyLogger.exe");
      qDebug() <<  "Run = " << ok;
      

      如何杀死应用程序

       system("taskkill /im CozxyLogger.exe /f");
       qDebug() << "Close";[enter image description here][1]
      

      更多链接::

      http://sittikron-big-rmutt.blogspot.com/2018/01/qt-start-and-kill.html

      【讨论】:

        【解决方案5】:

        在 Windows 中右键单击任务栏,选择任务管理器,在进程选项卡上,按名称找到进程..结束任务。

        【讨论】:

        • 这没有提供问题的答案。
        猜你喜欢
        • 2017-10-02
        • 2011-02-25
        • 2011-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多