如何确定 cmd.exe 的父进程

如何确定 cmd.exe 的父进程

有时我发现自己处于命令执行程序环境本身由另一个环境启动命令执行程序或另一个基于控制台的应用程序。现在,在这样的环境中工作,我想知道如果我输入exit,也就是说,cmd.exe 窗口是否会消失,或者它是否会返回到命令执行程序或调用它的应用程序。当然,这是因为有时我在命令执行程序我忘了我怎样称呼它了。

那么,有没有办法找出父进程(如果这是正确的术语)命令执行程序在另一个内命令执行程序

答案1

您可以使用 WMI 获取此信息。该类Win32_Process包含ParentProcessId

因此(使用 PowerShell 执行 WMI 命令 - 其他 WMI 工具也可用):

gwmi Win32_Process -filter 'processid = 1234' | select ParentProcessId

将给出进程 1234 的父进程 ID。

答案2

这不是来自 cmd.exe 本身,但是进程探索器有一个显示父进程的树视图。

替代文本

答案3

确定您感兴趣的进程(即进程)的进程 ID(pid) cmd.exe并输入

wmic 进程,其中 (ProcessId=<进程 ID>)获取标题,进程ID,父进程ID
这将获得与以下相同的信息(基本上通过相同的机制):理查德的回答,但仅使用cmd(即不需要 PowerShell)。

答案4

仔细阅读问题后,原帖作者问道

那么,有没有办法找出另一个 cmd.exe 中的 cmd.exe 的父进程(如果这是正确的术语)?

这与标题不同,标题应该是“如何确定当前 cmd.exe 的父进程”

回答问题而不是标题,一个非常简单的方法是使用 AUTORUN.CMD。由于它在每次调用 CMD 之前运行,因此它可以简单到:

SET /A LEVEL=%LEVEL+1
ECHO LEVEL = %LEVEL%

警告AUTORUN.CMD,虽然其工作原理与文档所述一致,但它是针对每个用户定义的,因此实际上只对非关键事物有用。任何其他依赖于 AUTORUN.CMD 的代码都必须处理它不存在的情况。

例如,我使用 AUTORUN.CMD 为每个 cmd 嵌套级别在提示符后附加一个星号:

PROMPT=%PROMPT%*$S

如下所示。

由于 CMD 变量对于实例而言是本地的,因此当您退出 cmd 时,将使用来自“外部”cmd 实例的环境值,如下所示:

Microsoft Windows [版本 10.0.19044.1826]
(c) Microsoft Corporation。保留所有权利。level
= 1
T:\ * cmd
Microsoft Windows [版本 10.0.19044.1826]
(c) Microsoft Corporation。保留所有权利。level
= 2
T:\ * * exit
T:\ * echo %LEVEL%
1
T:\ *

相关内容