Java-执行Shell命令不起作用

时间:2014-07-12 17:48:51

标签: java shell execution

我制作了一个简单的Java套接字程序,可以将文本从一台计算机发送到另一台计算机。

代码:

    Scanner scan =  new Scanner(System.in);
    System.out.println("Starting Server...");
    ServerSocket server = new ServerSocket(7777);

程序将套接字绑定到上面代码示例中第3行的端口7777。 但是,此程序有时会返回BindException。为了解决这个问题,我在绑定发生之前添加了这行代码:


Runtime.getRuntime().exec("lsof -t -i:7777 | xargs kill");

所以,总之:


    Scanner scan =  new Scanner(System.in);
    System.out.println("Starting Server...");
    Runtime.getRuntime().exec("lsof -t -i:7777 | xargs kill");
    ServerSocket server = new ServerSocket(7777);

运行shell命令以终止在端口7777上运行的所有进程。 但是,它并没有。如果在Terminal.app中键入相同的命令,它可以工作,如果我使用与上面示例的第4行相同的语法并使用不同的命令,例如"说出问候",该命令有效,但不能杀死一个。


所以,

为什么该命令不执行?

感谢。

1 个答案:

答案 0 :(得分:8)

Runtime.exec通过shell启动命令,而在使用管道时则需要这样做。试试这个:

Runtime.getRuntime().exec(
              new String[]{"sh","-c","lsof -t -i:7777 | xargs kill"},
              null, null);

我需要等待完成才能继续执行,请使用Process.waitFor

Process p = Runtime.getRuntime().exec(
              new String[]{"sh","-c","lsof -t -i:7777 | xargs kill"},
              null, null);
int exitCode = p.waitFor()