有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java执行Shell命令不工作

我正在制作一个简单的Javasocket程序,将文本从一台计算机发送到另一台计算机

代码:

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

程序将socket绑定到上面代码示例第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上运行的任何进程。 但事实并非如此。如果在终端中键入相同的命令。如果我使用与上例第4行相同的语法,并使用不同的命令,比如“say hello”,则该命令有效,但kill命令无效


所以

为什么这个命令不能执行

谢谢


共 (1) 个答案

  1. # 1 楼答案

    ^{}而不是通过shell启动命令,而这是使用管道时所必需的。试试这个:

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

    在继续执行之前,您需要等待完成,请使用^{}

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