![跟踪哪个程序启动了某个进程?](https://linux22.com/image/1433793/%E8%B7%9F%E8%B8%AA%E5%93%AA%E4%B8%AA%E7%A8%8B%E5%BA%8F%E5%90%AF%E5%8A%A8%E4%BA%86%E6%9F%90%E4%B8%AA%E8%BF%9B%E7%A8%8B%EF%BC%9F.png)
有一个困扰着我的某个进程,通过命令提示符或任务管理器将其终止后,大约一分钟内它仍会持续启动。
目前,我采用的方法是让批处理文件每 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
或者wmic
Barlop
或概述的进程方法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. 感染清理
考虑病毒感染?尝试检测并清除。