我觉得这个功能还是挺常用的,再我们实际企业应用中,肯定都是多台服务器同时部署使用的,这其中就会有一些服务器是数据服务器、接口服务器、专用服务器、或者其他系统的服务器等等。
我们通常会开发一个监测功能,能够检测每台服务器的状态,并且能够知道某个进程的状态,如果它宕机了,我能能直接在页面就重启服务重启进程,不需要再找到运维人员去线下机房重启服务,或者远程重启服务,这样很麻烦。
所以这就用到了我们Java来控制启停Windows服务进程
很简单,直接上代码吧。我这里那我们的谷歌浏览器演示一下。
先打开谷歌浏览器Chrome,打开任务管理器。
可以发现在任务管理器的详细信息中就有了我们的chrome.exe进程。这就是我们启动和关闭的进程程序。
代码中的进程名称就是 chrome.exe。
url就是这个进程对应的具体位置,可以直接右键打开位置,然后把路径拷贝过来就行了。
代码如下。
public static void main(String[] args) throws IOException{
// 停止进程
String kill = killProcess("chrome.exe");
System.out.println(kill);
// 启动进程
String active = startProcess("chrome.exe","C:\\Users\\bihe\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe");
System.out.println(active);
}
启动进程
public static String startProcess(String processName, String url) throws IOException {
String s = "进程名称不能为空";
//需要先检测进程是否存在
if (!"".equals(processName)) {
if (!"".equals("此进程已开启")) {
String kill = killProcess(processName);
Desktop.getDesktop().open(new File(url));
s = "进程重启成功";
} else {
Desktop.getDesktop().open(new File(url));
s = "进程开启成功";
}
}
return s;
}
关闭进程
//关闭进程
public static String killProcess(String processName) throws IOException {
String s = "进程名称不能为空";
String active = getProcessStatus(getProcessName(), processName);
if (!"".equals(processName)) {
if (active.equals("此进程已结束")) {
s = "进程已关闭,无需再次关闭";
} else {
Process p = Runtime.getRuntime().exec("taskkill /F /IM " + processName);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(), "gbk"));
s = br.readLine().toString();
}
}
return s;
}