跟踪哪个程序启动了某个进程?

跟踪哪个程序启动了某个进程?

有一个困扰着我的某个进程,通过命令提示符或任务管理器将其终止后,大约一分钟内它仍会持续启动。

目前,我采用的方法是让批处理文件每 15 秒循环一次,如果存在则将其终止。但是,我更希望能够停止启动它的内容。

Windows 7 有没有什么方法可以跟踪进程的启动方式?

答案1

有一个叫做 PPID(父进程 ID)的东西,但在 Windows 中找到它相对“棘手”,因为它不是任务管理器中显示的列,我甚至在进程资源管理器中的列中也看不到它。

两种方法

Method 1 - WMIC
Method 2 - Process Monitor

这两种方法都非常快捷

方法 1-WMIC

我将使用此处的如何使用 WMIC 查找 PPID 的答案 https://stackoverflow.com/questions/7486717/finding-parent-process-id-on-windows

这使得剩下的部分相当简单

C:\blah>wmic process get processid,parentprocessid
ParentProcessId  ProcessId
0                0
0                4
4                320
392              572
320              656
648              664
392              688
688              740
688              756
688              764
...              ...

其余部分就相当明显了。

假设你想查找谁启动了 calc.exe

从任务管理器中看到的 calc.exe 的 PID 是 7384

C:\blah>wmic process get processid,parentprocessid | find "7384"
10896            7384

PPID             PID


C:\crp>

WMIC 显示 PID 和 PPID 之间的关联。然后在任务管理器中查找 10896(10896 是 calc.exe 的 PID 7384 所对应的 PPID),在任务管理器中,我看到 PID 为 10896 的进程是 cmd.exe,这是我用来启动 calc.exe 的进程,而 cmd.exe 确实是生成 calc.exe 的父进程

方法 2 - 进程监视器

您可以在 sysinternals 进程监视器中执行此操作。

单击菜单栏中的过滤器..过滤器,并添加一个过滤器,过滤进程的名称或路径或 PID,例如进程名称 calc.exe 或路径过滤器,然后输入 c:\windows\system32\calc.exe

我碰巧使用了进程名称

在此处输入图片描述

如果尚未捕获,则执行“确定...”和“文件...捕获”。

双击正确的进程,因此在这种情况下加载图像 calc.exe 并出现属性对话框,单击正确的选项卡“进程”,您将看到 PID 和 PPID(父进程 ID)。

在此处输入图片描述

当然,当你知道 PPID 时,你可以在任务管理器中查找它,以了解哪个进程产生了它

答案2

如果这是一个在后台运行的进程,我可能会使用Process Explorer或者wmicBarlop或概述的进程方法Robert Koritnik。如果进程是瞬态的并且启动/退出非常快,没有足够的时间执行必要的点击和击键,我会使用 nixda 概述的进程监视器。

我参加这个聚会有点晚了,但是为了完整起见:

另一种替代方法是使用内置进程跟踪(如果出于某种原因,您不想使用进程监视器)。您可以通过以下方式启用此功能:

控制面板 -> 管理工具 -> 本地安全策略 -> 本地策略 -> 审计策略如果控制面板中没有管理工具,打开本地安全策略的另一种方法是单击“开始”按钮并输入安全警察管理系统

您应该会看到几个审计选项,包括审计流程追踪. 为类别启用此功能成功

在此处输入图片描述

现在事件查看器 -> Windows 日志 -> 安全,您将看到一个“进程创建”事件(事件 ID 为 4688),以及正在创建的进程的名称/路径,以及一个名为创建者进程 ID. 它包含创建此进程的进程 PID 的十六进制表示(您可以使用以下方式轻松转换计算程序在里面程序员看法)。

在此处输入图片描述

您可以在任务管理器中查找该 PID(“创建者进程”的 PID,即 PPID),或者在类似以下的输出中查找任务列表/svc
如果该进程不再存在,您可以查找该进程创建时 ID 为 4688 的其他 PID 事件。

答案3

一些可以尝试的建议(随机顺序),其中一些可能不会产生可行的结果,或者您已经尝试过。我自己还没有尝试过这些,所以我只是提供其他人可能会错过的想法。集思广益……请注意,我的大部分建议都是为了缓解问题,而不是从根本上解决问题。它们就是所谓的铤而走险或者Z计划

1.任务管理器中的命令行信息

你检查过吗命令任务管理器中的列是否提供此信息?我想你已经尝试过了。

2. Process Explorer 中的进程信息

如果命令是空的,我会尝试 SysInternals 的 Process Explorer,看看是否可以获得有关此特定进程的更多信息。

3. 暂停进程

如果你似乎找不到问题的根源,你可以尝试暂停该进程,这样它仍然存在,但它不会做任何事情。你可以使用资源监控
资源监控进程暂停

或者SysInternals 进程浏览器
进程浏览器进程暂停

启动它的某个未知进程可能会检查进程(按名称),如果发现不存在,则会启动它。如果您暂停它,它将存在,因此此初始化过程可能不会产生新实例。

如果初始化过程使用其他进程检测方式(进程间通信),则可能会失败,但这种类型的进程检测更难开发,因此更简单的选项获胜。

4. 定制方案

这里我们可能要处理两个过程。第一的一个检查第二个进程是否存在并启动它(您正在终止它)。当第二个进程运行时,您可能会看到它的命令行,但知道这一点对您甚至不启动它没有帮助,您可能更愿意去寻找第一个进程,因为它实际上启动了一切。真不走运。

但既然你似乎精通计算机,你可以用你自己的可执行文件替换第二个进程(如果知道命令行),这个可执行文件什么也不做,只是待在那里。它需要有相同的进程名称。它也可以自行启动和立即终止。

如果您非常擅长底层操作系统开发,您可以编写第二个进程,以便检查谁启动了它(如果可能的话)。我不确定,但 Windows API 应该提供此类信息。这样您就可以找到问题的根源。

5. 任务计划程序

您的进程可能不是由其他进程生成的,而是由每分钟运行的已定义的计划任务作业生成的。我不确定您是否已经检查过,但可能是这种情况。

6. 感染清理

考虑病毒感染?尝试检测并清除。

相关内容