【问题标题】:How to get old process id after system restarts in windows OS?如何在 Windows 操作系统中重新启动系统后获取旧进程 ID?
【发布时间】:2018-09-19 15:58:30
【问题描述】:

我正在做一个项目,我需要在 Windows 操作系统中获取进程的旧 PID。

旧 PID 是指在系统重新启动之前分配给特定进程的 PID(例如,记事本的 PID 为 100)。现在重新启动系统后,我需要旧的 PID(100) 并再次启动该过程。

Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("C:\\Windows\\notepad.exe");

这是我的示例代码,如果可能,请提供解决方案或任何其他方式我可以找回旧的PID和旧的进程。

【问题讨论】:

  • 除非 Windows 在其事件/安全日志中记录这些内容,或者您​​在启动应用程序或重新启动计算机之前记录这些内容,否则我认为这是不可能的。
  • 请详细说明三种标记语言各自的作用。
  • 为什么系统重启后需要取回旧PID?这看起来像 XY Problem
  • 另一件事 - 您将无法在进程启动之前指定 PID。操作系统将在那时分配 PID - 您无法告诉操作系统启动应用程序并使用指定的 PID。
  • @PatelVikash 就像在您的代码 sn-p 中一样重新启动应用程序,这有什么问题?为什么要关心 PID?

标签: java


【解决方案1】:

在 unix 系统上,通常的做法是在与脚本相同的目录中创建一个名为 .pid 的简单文本文件来启动和停止应用程序。它包含正在运行的进程的pid 编号。

如果应用程序崩溃(或系统在没有完全关闭的情况下重新启动),.pid 文件将保留。

重新启动应用程序时,尽管从操作的角度来看,.pid 文件中包含的 pid 号不再相关,但可以很方便地知道进程已崩溃(或至少没有完全关闭) - 通常是操作的start 脚本将检查.pid 文件,并且在手动删除此文件之前不会启动应用程序。

所以你可以在你的情况下做类似的事情。您需要“包装”进程/服务的启动和关闭以促进这一点。

这里有个问题:What is a .pid file and what does it contain?

【讨论】:

    【解决方案2】:

    您应该存储打开的应用程序列表(名称/exe 路径),而不是它们的 PID,因为旧的 PID 在进程终止/中止后将毫无意义。重新启动应用程序后,操作系统将分配一个新的 PID,您作为程序员将无法控制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-24
      • 2021-05-15
      • 2012-03-11
      相关资源
      最近更新 更多