Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Runtime.exec在Bash后台运行Java runnable JAR进程_Java_Bash_Shell_Executable Jar_Runtime.exec - Fatal编程技术网

如何使用Runtime.exec在Bash后台运行Java runnable JAR进程

如何使用Runtime.exec在Bash后台运行Java runnable JAR进程,java,bash,shell,executable-jar,runtime.exec,Java,Bash,Shell,Executable Jar,Runtime.exec,我正在尝试运行一个Java runnable JAR,在前台做一些事情,然后让它进入后台。。。我在代码中使用以下putInBackground方法来查找与“command”字符串匹配的进程,获取其PID,向其发送SIGSTOP、bg,并disown-h it。。。我有以下代码: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Co

我正在尝试运行一个Java runnable JAR,在前台做一些事情,然后让它进入后台。。。我在代码中使用以下putInBackground方法来查找与“command”字符串匹配的进程,获取其PID,向其发送SIGSTOP、bg,并disown-h it。。。我有以下代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class CommandUtil
{

    private static final String GPID = "ps -ef | grep '%s' | grep -v grep | awk '{print $2}'";
    private static final String PCMD = GPID + " | xargs %s";
    private static final String STOP = "kill -19";
    private static final String BCKG = "bg";
    private static final String DSON = "disown -h";

    private static Runtime runtime;
    private static Process process;
    private static BufferedReader bufferedReader;
    private static String outputLine;

    private static boolean runtime() {
        return (runtime = Runtime.getRuntime()) != null;
    }

    public static boolean putInBackground(String command) {
        if(runCmdPid(command, STOP)) {
            if(runCommand(BCKG)) {
                return runCommand(DSON);
            }
        }

        return false;
    }

    public static boolean runCmdPid(String command, String xargs) {
        return runCommand(String.format(PCMD, command, xargs));
    }

    public static boolean runCommand(String command) {
        if(runtime() && command != null && !command.isEmpty()) {
            try {
                process = runtime.exec(command);
                process.waitFor();
                bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                while ((outputLine = bufferedReader.readLine()) != null) {
                  System.out.println(outputLine);
                }
                bufferedReader.close();
            } catch (IOException | InterruptedException e) {
                e.printStackTrace();
                return false;
            }

            return true;
        }

        return false;
    }

 }
…不幸的是,当我尝试使用上述CommandUtil类(通过SSH远程)将调用类的JAR放到后台时,我得到了以下输出:

java.io.IOException:无法运行程序“bg”:错误=2,没有此类文件或 位于java.lang.ProcessBuilder.start的目录(ProcessBuilder.java:1048) 位于java.lang.Runtime.exec(Runtime.java:620) java.lang.Runtime.exec(Runtime.java:450)位于 java.lang.Runtime.exec(Runtime.java:347)位于 查找.me.home.tools.CommandUtil.runCommand(CommandUtil.java:42) find.me.home.tools.CommandUtil.putInBackground(CommandUtil.java:27) 在find.me.home.FindMeAndelsbolig.main(FindMeAndelsbolig.java:84)中 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)位于 invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 位于java.lang.reflect.Method.invoke(Method.java:498) org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58) 原因:java.io.IOException:error=2,此时没有此类文件或目录 位于的java.lang.UNIXProcess.forkAndExec(本机方法) UNIXProcess.java:248) java.lang.ProcessImpl.start(ProcessImpl.java:134)位于 java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)。。。还有11个

我将非常感谢在这里提供的任何帮助。。。我知道只运行一个bash脚本,然后在命令末尾添加&以将其放在后台会容易得多,但我需要允许事先输入密码。此外,我认为我不能从bash脚本运行它,因为我必须等待密码输入,然后才能将其放到后台

无论如何,谢谢你,谢谢所有人,祝你度过愉快的一天

真诚地,
Piotr.

尝试为
bg
/usr/bin/bg
@derlarsschneider使用绝对路径,不幸的是结果是相同的:/java.io.IOException:cannotrunprogram”/usr/bin/bg:error=2,java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)(…)