C++ QProcess使用批处理脚本启动plink.exe,但终止QProcess不会';别停下来
我正在用Qt开发一个应用程序 首先,我创建了一个QProcess对象:C++ QProcess使用批处理脚本启动plink.exe,但终止QProcess不会';别停下来,c++,windows,qt,batch-file,qprocess,C++,Windows,Qt,Batch File,Qprocess,我正在用Qt开发一个应用程序 首先,我创建了一个QProcess对象: process = new QProcess(this); // launching plink by script process->start(plinkLauncherScriptPath, arguments); 脚本如下所示: @echo off echo y | "%~dp0/plink.exe" %1 -L %2 我得到seesionID,一切似乎都正常,但当我想结束此会话并打开一个新会话时,问
process = new QProcess(this);
// launching plink by script
process->start(plinkLauncherScriptPath, arguments);
脚本如下所示:
@echo off
echo y | "%~dp0/plink.exe" %1 -L %2
我得到seesionID,一切似乎都正常,但当我想结束此会话并打开一个新会话时,问题出现了
我尝试用以下方法终止进程:
QString write = "0x01";
process->write(write.toLatin1());
// process->terminate(); i tried this too
process->close();
// process->kill(); i tried this too
进程被终止,但PLINK.exe仍在运行(我在Windows任务管理器中看到),并且每个新会话都会创建另一个正在运行的实例
从应用程序中,我只能获取QProcess的pid,而不能获取plink本身:
process->pid(); // here would be shown some id 0x875f50c8
process->processId(); // here would be shown some id 4936
process->close();
process->pid(); // here would be shown some id 0x0
process->processId(); // here would be shown some id 0
此代码显示QProcess已成功关闭,但plink仍保留
一种选择是创建另一个脚本,该脚本将杀死所有名为“PLINK”的进程。它可以是这样的:
@echo off
echo y | "%~dp0/plink.exe" %1 -L %2
taskkill/im plink.exe
不幸的是,通过运行它,我会杀死所有的plink进程,甚至是那些由其他程序启动的进程
你有办法解决这个问题吗 ?在Windows上,进程没有有意义的父子关系。系统记录此信息仅供参考。如果您希望终止整个流程树,您必须自己手动搜索所有参与的流程。如果要作为一个整体控制一组流程,请使用。