Java代码整合Linux命令,实现控制jar包程序启停。并不会因源程序停止而受影响
时间: 2024-12-14 07:14:53 浏览: 8
在Java中,我们可以利用Runtime或ProcessBuilder类来执行Linux命令,实现对jar包程序的控制。以下是一个简单的示例,展示如何通过Java启动和停止一个jar文件:
```java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.concurrent.TimeUnit;
public class JarControl {
private final String jarPath; // jar包路径
public JarControl(String jarPath) {
this.jarPath = jarPath;
}
/**
* 启动jar程序
*/
public void start() {
try {
Process process = Runtime.getRuntime().exec("nohup java -jar " + jarPath + " &");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
System.out.println("Jar started, output: ");
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 停止jar程序,假设它有一个名为"stop"的系统属性
*/
public boolean stop() {
try {
Process process = Runtime.getRuntime().exec("ps aux | grep " + jarPath + " | awk '{print $2}'"); // 获取进程ID
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String pidLine = reader.readLine(); // 获取第一个行,即PID
if (pidLine == null) {
return false; // 没有找到对应进程
}
int pid = Integer.parseInt(pidLine.trim());
Runtime.getRuntime().exec("kill -9 " + pid); // 使用kill命令强行终止
return true;
} catch (Exception e) {
System.err.println("Failed to stop the jar.");
return false;
}
}
}
```
在这个例子中,`start()`方法启动jar,并捕获其输出。`stop()`方法尝试找出正在运行的jar的进程ID,然后使用`kill`命令强制停止。
注意,这只是一个基础示例,实际应用中可能需要处理更多异常情况,比如找不到jar进程、权限不足等。此外,如果jar程序本身提供了更友好的信号处理机制,那么可能会有更好的停止方式。
阅读全文