使用Java的反引号执行Unix命令

kau*_*tta 1 java unix process

我试图从java执行以下命令(在unix框中正确运行) -

kill -9 `ps -ef | grep -i myScript.sh | grep bash | awk '{print $2}'`
Run Code Online (Sandbox Code Playgroud)

但是当通过Java执行时,我得到以下错误 -

/usr/bin/kill[8]: `ps: Arguments must be %job or process ids
Exit : 1
Run Code Online (Sandbox Code Playgroud)

码:

String command = "kill -9 `ps -ef | grep -i myScript.sh | grep bash | awk '{print $2}'`";
Process process=Runtime.getRuntime().exec(command);
InputStream stderr = process.getErrorStream();
InputStreamReader inputStream = new InputStreamReader(stderr);
BufferedReader reader = new BufferedReader(inputStream);
String error = null;
while((error = reader.readLine()) != null) {
    System.out.println(error);
}
exitVal = process.waitFor();
System.out.println("Exit : "+ exitVal);
Run Code Online (Sandbox Code Playgroud)

ps - 只是提醒一下,命令在shell下运行完全正常.

Dav*_*ebb 5

您尝试运行的是一个shell命令行,但是您正在运行kill并将所有参数传递给它,这就是您收到错误的原因/usr/bin/kill.

您应该bash从Java代码中运行shell ,然后使用该-c选项传递命令行.

如果您这样做,将命令参数作为数组而不是单个sting传递可能是个好主意.

String[] command = {"bash","-c","kill -9 `ps -ef | grep -i myScript.sh | grep bash | awk '{print $2}'`"};
Run Code Online (Sandbox Code Playgroud)