【问题标题】:Is there a way to reliably list subprocesses in Go?有没有办法可靠地列出 Go 中的子进程?
【发布时间】:2023-08-19 06:08:01
【问题描述】:

我的程序正在使用exec.Command 来运行一个子进程(我无法控制),这反过来又启动了另一个子进程。问题是第二个子进程不是在第一个子进程下运行,而是在原始进程下运行,如果需要,我无法明确杀死它。我确实需要。

那么,是否有一种与平台无关的方式来列出子进程,以便我可以明确地清理它?

【问题讨论】:

  • 我不确定这是否真的是 Go 特定的。也许用更一般的东西标记它会帮助它被看到。
  • @Logiraptor 我添加了一些标签,感谢您的反馈。
  • 不,你不能以跨平台的方式。 (这是在 Windows 上,因为它不能在 Linux/Unix 上发生)

标签: process go exec portability


【解决方案1】:

平台无关的方式是使用PID files,或其他一些类似的机制。缺点是您必须让子流程应用程序(及其供应商)生成必要的信息。

唯一的另一种可能性是开发您自己的多平台库,因为子流程语义和流程相关的 API 会随着平台的变化而变化。现有的一些实用程序只是获取系统中所有进程的列表,并查询每个进程的父 pid,并使用自定义逻辑构建树。

【讨论】:

    最近更新 更多