如何在Qt中按进程名称结束进程

6
我正在使用Qt为Windows编写桌面应用程序。
我有3个进程的名称,如果它们正在运行,我希望在我的应用程序开始时杀死它们。
最好的方法是什么?(通过使用进程名称获取进程状态,并在其打开时将其终止)。
代码示例可以对我有很大帮助。 谢谢!

http://stackoverflow.com/questions/4538967/how-to-find-the-running-process-and-kill-the-process-in-qt?rq=1 - user362638
5个回答

12

您可以使用QProcess来实现这个目的。 在您的应用程序启动时,执行:

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”

您可以在此处阅读更多相关内容


谢谢,pkill命令在Windows中也可以工作吗?它比本地的Win32 API更好吗? - user758795
使用WIN32 API比较好吗?如果是,为什么? - user758795
'pkill' is not recognized as an internal or external command, operable program or batch file. - kayleeFrye_onDeck
'process' is not recognized as an internal or external command, operable program or batch file. - kayleeFrye_onDeck
1
@kayleeFrye_onDeck 在Windows上使用taskkill /im program.exetaskkill /pid 123 - niutech

6
在Windows下使用taskkill命令。您可以使用以下方式调用它:
QProcess::execute("taskkill /im <processname> /f");

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

1

QT并未提供用于终止非由QT项目创建的进程的API。如果您在Windows上,可以尝试以下代码,如此处所述。

#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;
}

1
如何运行应用程序
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


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

1
这并没有回答问题。 - hongsy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接