通过一些linux可以进行操作,但是web上如何触达linux,这里可以使用java的controller进行中转,这里写了一个方式,但是不太符合领导需要,但是也是自己学习的一个小里程碑,做些记录。
测试可用。
1.核心代码
package com.jun.test.utils;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
/**
* 通过程序控制linux中的命令执行
*/
public class LinuxExeUtils {
/**
* 命令执行,返回执行后的结果
*
* @param cmd 输入的命令
* @return 执行结果
*/
public static String exec(String cmd) {
try {
String[] cmdA = {"/bin/sh", "-c", cmd};
Process process = Runtime.getRuntime().exec(cmdA);
LineNumberReader br = new LineNumberReader(new InputStreamReader(process.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
sb.append(line).append("\n");
}
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
2.杀死进程
首先需要输入的是一些关键字
/**
* 停止直播
*/
@PostMapping("kill")
public void killFfmpeg(@RequestBody FfmpegKillInfoDTO ffmpegKillInfoDTO) {
// 获取pid,进行
String pidStr = LinuxExeUtils.exec("ps -ef|grep ffmpeg | grep " + ffmpegKillInfoDTO.getKillInfo() + " | awk '{print $2}'");
log.info("程序杀死pid是{}", pidStr);
// 杀死pid
if (Strings.isNotBlank(pidStr)) {
log.info("程序杀死pid是{}", pidStr);
LinuxExeUtils.exec("kill -9 " + pidStr);
}
}