创建进程时隐藏所有子进程

Posted

技术标签:

【中文标题】创建进程时隐藏所有子进程【英文标题】:Hide all subprocesses when creating a process 【发布时间】:2021-02-16 02:54:05 【问题描述】:

论据

WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = true,

只在第一个创建的进程上工作。例如,如果我们调用一个cmd,它又调用了另一个cmd,那么只有父级会被隐藏。

Process p = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo

    UseShellExecute = false,
    WindowStyle = ProcessWindowStyle.Hidden,
    CreateNoWindow = true,
    FileName = @"cmd.exe",
    Arguments = "/K start cmd"
;
p.StartInfo = startInfo;
p.Start();

有没有办法隐藏所有子进程?

【问题讨论】:

【参考方案1】:

没有。你隐藏了一个特定的窗口,就是这样。一个进程可以显示任意数量的窗口,启动新进程也是如此。

如果您可以控制正在运行的脚本,则可以使用 start/B 参数,它允许您在不创建新窗口的情况下启动另一个进程 - 但同样,它不是“继承的” ;你需要在任何你想避免打开新终端的地方添加它。

【讨论】:

问题是我运行 procmon.exe,它运行 procmon64.exe,因此它是可见的。没有办法将 procmon64.exe 本身作为文件获取。 @Yair3230 您可以使用 procmon 的 /minimized 参数使其开始最小化到通知区域(/quiet 可能也有帮助)。如果这对您来说还不够好,您可以在进程开始后隐藏窗口,但这会显示窗口至少一小会儿。

以上是关于创建进程时隐藏所有子进程的主要内容,如果未能解决你的问题,请参考以下文章

Shell脚本入门 07:进程与信号

Shell脚本入门 07:进程与信号

Linux学习-进程管理

golang 热重启

MPI C 将矩阵逐行发送到所有进程子进程 (MPI_COMM_SPAWN)

关于wait 和 exit