【问题标题】:Batch file to run close file if already running (scheduled job)批处理文件运行关闭文件,如果已经运行(计划作业)
【发布时间】:2012-10-02 13:44:06
【问题描述】:

所以我遇到了一个有趣的问题,我用 java 编写了一个似乎曾经崩溃过的程序。我不知道导致它崩溃的确切条件(因为它似乎在那段时间停止了记录)。但是它是通过批处理文件调用的(运行:

java -jar MyProg.jar

)

话虽如此,当程序未能正确执行时(尽管有一定数量的安全网),它应该停止运行。有什么方法可以检查用户 x 是否正在运行 java.exe,如果是,请执行以下操作:

taskkill /IM java.exe /f 

在我尝试运行我的程序或类似的东西之前?谢谢。

【问题讨论】:

  • 我不确定我是否理解正确,但如果您要求查看进程并关闭它们,因此可以在 Windows 中通过任务管理器 - 进程选项卡完成。
  • 我希望以编程方式执行此操作,因为即使我不在/睡着了,该任务也会每 5 分钟运行一次。因此,它需要检测程序是否以用户名 ____________ 运行(它是一个只运行这件事的系统帐户),如果是,则在运行 jar 文件之前将其杀死。
  • 您是在问如何杀死由特定用户使用 taskkill 启动的任务?
  • @MartinWilson 本质上。假设我想杀死“Java.exe”,但前提是它在我运行批处理文件时由用户 D贝尔打开。
  • 如何在启动进程时将 pid 存储在一个文件中,然后使用它来杀死它?捕获 pid 是困难的部分。这里有几个想法:*.com/questions/1807794/…

标签: java batch-file scheduled-tasks


【解决方案1】:
tasklist /nh /fi "imagename eq java.exe" | find /i "java.exe" >nul && taskkill /im java.exe /f || rem Java not running, run your program

【讨论】:

  • 不幸的是,这可能不是最好的处理方式,因为有多个系统帐户以不同的时间间隔在此框上运行各自的程序。我知道至少有 1-2 个其他帐户运行使用 java 的 5 分钟任务。我需要首先找出我的帐户(比如说 D Bell)正在调用 java.exe 来运行,有什么办法可以做到这一点吗?
  • 据我所知,我认为 tasklist 没有过滤器来过滤正在运行进程的用户。除非您知道自己的会话 ID,否则您也许可以做到。
最近更新 更多