xǝl*_*ǝlɐ 1 java shell execution
我正在制作一个简单的Java套接字程序,将文本从一台计算机发送到另一台计算机.
码:
Scanner scan = new Scanner(System.in);
System.out.println("Starting Server...");
ServerSocket server = new ServerSocket(7777);
Run Code Online (Sandbox Code Playgroud)
程序将套接字绑定到上面代码示例中第3行的端口7777.但是,此程序有时会返回BindException.为了解决这个问题,我在绑定发生之前添加了这行代码:
Runtime.getRuntime().exec("lsof -t -i:7777 | xargs kill");
Run Code Online (Sandbox Code Playgroud)
所以,总的来说:
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);
Run Code Online (Sandbox Code Playgroud)
这应该运行shell命令来终止在端口7777上运行的任何进程.但是,它不会.如果在Terminal.app中键入相同的命令,它可以工作,如果我使用与上面示例的第4行相同的语法并使用不同的命令,比如"say hello",那么该命令可以工作,但不能使用kill命令.
所以,
谢谢.
Runtime.exec会不会用一个shell启动的命令,而当你使用这是必需的管道.试试这个:
Runtime.getRuntime().exec(
new String[]{"sh","-c","lsof -t -i:7777 | xargs kill"},
null, null);
Run Code Online (Sandbox Code Playgroud)
我需要等待完成才能继续执行,使用Process.waitFor:
Process p = Runtime.getRuntime().exec(
new String[]{"sh","-c","lsof -t -i:7777 | xargs kill"},
null, null);
int exitCode = p.waitFor()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1347 次 |
| 最近记录: |