C++ QProcess使用批处理脚本启动plink.exe,但终止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,一切似乎都正常,但当我想结束此会话并打开一个新会话时,问

我正在用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,一切似乎都正常,但当我想结束此会话并打开一个新会话时,问题出现了

我尝试用以下方法终止进程:

 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上,进程没有有意义的父子关系。系统记录此信息仅供参考。如果您希望终止整个流程树,您必须自己手动搜索所有参与的流程。如果要作为一个整体控制一组流程,请使用。