因此,我使用自己的 .NET 进程来启动命令行进程,如下所示:
ProcessStartInfo startInfo = new ProcessStartInfo();
Process p = new Process();
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardOutput = redirectOutput;
startInfo.RedirectStandardError = redirectError;
//startInfo.WindowStyle = ProcessWindowStyle.Hidden; //is this necessary for cmd line commands?
startInfo.RedirectStandardInput = false;
startInfo.UseShellExecute = false;
String arguments = "/C PYTHON_SCRIPT";
startInfo.Arguments = arguments;
String pathToProcess = "cmd.exe";
startInfo.FileName = pathToProcess;
startInfo.WorkingDirectory = workingDirectory;
p.StartInfo = startInfo;
p.Start();
该过程执行得很好,我得到了它的输出/错误。当我想在它完成执行之前将其杀死时,问题就来了。由于 cmd 行在技术上启动了“PYTHON_SCRIPT”进程本身,我不知道该进程的进程 ID 是什么!因为那是我真正想要杀死的人(不是 cmd 行),所以我搞砸了。我实际上已经杀死了 cmd 行进程以查看它是否有任何效果,但它没有。
任何帮助,将不胜感激。
如果不清楚,问题是:“我如何杀死 PYTHON_SCRIPT(或任何其他)进程?”
编辑:对不起,我不清楚......我正在使用 PYTHON_SCRIPT 作为填充物。我以这种方式启动了许多不同的进程,并非所有进程都是 python 脚本。有些是批处理文件,有些是 python 脚本,有些是 perl 脚本等。我更喜欢这里的通用解决方案。
编辑2:情况比问题中可能出现的要复杂一些。例如,我正在使用 scons 来构建一些代码。使用“cmd /C scons”很容易。然而,启动 scons 进程要困难得多,因为它是一个 python 脚本。我传入了一个不同的工作目录,所以“python.exe scons.py scons”根本不起作用,“scons.bat scons”也不会,因为 scons.bat 需要找到 scons.py,而 scons.py 是不在我的工作目录中。