我想通过我创建的可执行 jar 启动 web 服务(这样我最终可以使用 procrun 让它作为 Windows 服务启动)。Web 服务当前通过调用类的 main 方法通过命令行启动。
到目前为止,这是我的代码:
public class test
{
private static boolean stop = false;
private static Process process;
public static void start(String[] args)
{
String classpath = "my\\classpath\\test.jar";
ProcessBuilder processBuilder = new ProcessBuilder("C:\\java\\jdk1.6.0_43\\bin\\java",
"-cp", classpath,
"com.test.theJavaWebServiceWithAMainMethod");
try
{
process = processBuilder.start();
}
catch (IOException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
public static void stop(String[] args)
{
stop = true;
process.destroy();
}
public static void main(String[] args)
{
if (args != null && args.length > 0)
{
String command = args[0];
if ("start".equals(command))
{
start(args);
}
else if ("stop".equals(command))
{
stop(args);
}
}
else
{
throw new IllegalArgumentException("command missing");
}
}
}
启动工作正常。我在任务管理器中看到进程启动,我现在可以拉起 WSDL。但是,当我通过process.destroy()
(通过调用 main 方法stop
)杀死进程时,我得到一个空指针异常,我认为这是因为这是 jvm 的一个新实例,所以它不知道我调用时的进程start
。什么是保持这个进程对象或 pid 或其他东西的最佳方法,所以当我去调用停止时,我可以找到并终止正在运行的 web 服务(java 进程)?