如何从命令行停止执行Java程序?

Aak*_*ash 8 java interrupt

我的主要领域是.Net,但最近我与Java有关.我必须在Java中创建一个shell实用程序,它可以在后台运行,在指定的持续时间后读取少量数据库记录并进行进一步处理.这是一种调度程序.现在我几乎没有顾虑:

如何使这项工作作为一项服务.我想通过shell脚本执行它,该实用程序应该开始运行.当然,控件应该返回到调用脚本.

其次,最终我可能想要阻止这个过程运行.怎么做到这一点?

我理解这些是基本问题,但我真的不知道从哪里开始,哪些选项最适合我.

有任何帮助/建议吗?

Luh*_*har 3

我会使用调度程序或服务来运行程序。但是,如果您希望使用 bat 文件并以编程方式执行此操作,我在下面概述了一种可能的方法:

在 Java 程序中,您可以通过编程方式获取 PID,然后将其写入文件:

public static void writePID(String fileLocation) throws IOException
{
    // Use the engine management bean in java to find out the pid
    // and to write to a file
    if (fileLocation.length() == 0)
    {
        fileLocation = DEFAULT_PID_FILE;
    }       
    String pid = ManagementFactory.getRuntimeMXBean().getName();
    if (pid.indexOf("@") != -1) 
    {
        pid = pid.substring(0, pid.indexOf("@"));
    }                                               
    BufferedWriter writer = new BufferedWriter(new FileWriter(fileLocation));
    writer.write(pid);
    writer.newLine();
    writer.flush();
    writer.close();                     
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以编写一个 stop .bat 文件来终止 Windows 中正在运行的程序。你可以这样做:

setlocal
IF EXIST app.pid FOR /F %%i in ('type app.pid') do TASKKILL /F /PID %%i   
IF EXIST app.pid DEL app.pid
endlocal
Run Code Online (Sandbox Code Playgroud)

当然,app.pid就是上面Java方法写的文件。

我不确定您如何编写启动 java 程序并在终止时恢复控制的脚本。我很想看看是否有人有解决方案。