java - 从 Java 执行带反引号的 Unix 命令

标签 java unix process

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

kill -9 `ps -ef | grep -i myScript.sh | grep bash | awk '{print $2}'`

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

/usr/bin/kill[8]: `ps: Arguments must be %job or process ids
Exit : 1

代码:

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);

附注- 提醒一下,该命令在 shell 下运行得非常好。

最佳答案

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

您应该从您的 Java 代码运行一个类似 bash 的 shell,然后使用 -c 选项传递您的命令行。

如果您正在这样做,将命令参数作为数组而不是单个字符串传递给您可能是个好主意。

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

关于java - 从 Java 执行带反引号的 Unix 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15677473/

相关文章:

c++ - 如何将后台运行的子进程调到前台

c - 进程不能在 linux 上被杀死

c - 到达一定时间后杀死子进程

linux - Shell脚本使用sendmail嵌入多个图像

java - 在java中实现微批处理

java - 使用 JAX-WS 使用 ASP.net Web 服务,获取 "The specified type is abstract"

java - OSGi ServiceTracker modifiedService() 方法何时真正被框架调用?

java - HashMap 在第 12 个索引中插入第一条记录

java - 多平台 getResourceAsStream

c - 使用 STDOUT_FILENO、STDIN_FILENO 和\n 解释读、写系统调用行为