【发布时间】:2012-07-08 08:20:29
【问题描述】:
我正在 Qt 中为 Windows 编写桌面应用程序。
我有 3 个进程的名称,如果它们正在运行,我想在我的应用程序开始时杀死它们。
最好的方法是什么?(使用进程名称获取进程的状态,如果它是打开的,则将其杀死)。
代码示例对我有很大帮助。 谢谢!
【问题讨论】:
我正在 Qt 中为 Windows 编写桌面应用程序。
我有 3 个进程的名称,如果它们正在运行,我想在我的应用程序开始时杀死它们。
最好的方法是什么?(使用进程名称获取进程的状态,如果它是打开的,则将其杀死)。
代码示例对我有很大帮助。 谢谢!
【问题讨论】:
您可以为此目的使用 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”
您可以阅读更多这些here。
【讨论】:
'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.
Windows下使用taskkill命令 你可以调用它
QProcess::execute("taskkill /im <processname> /f");
或者
system("taskkill /im <processname> /f");
【讨论】:
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;
}
【讨论】:
如何运行应用程序
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
【讨论】:
在 Windows 中右键单击任务栏,选择任务管理器,在进程选项卡上,按名称找到进程..结束任务。
【讨论】: