通过一些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);
        }
    }