当前位置: 首页 > 知识库问答 >
问题:

java.lang.Process正在阻塞控制台

彭琛
2023-03-14

有没有办法避免java.lang.Process阻塞控制台?在我的情况下,当我执行以下代码时,我的输入在控制台中被阻止。所以我几乎再也不能输入任何东西了。我已经试过了。例如,在新线程中启动它是不起作用的。

ProcessBuilder processBuilder = new ProcessBuilder(
            "java",
            "-Xms" + this.proxyConfiguration.getMemory() + "M",
            "-Xmx" + this.proxyConfiguration.getMemory() + "M",
            "-jar",
            new File(path).getAbsoluteFile().getPath() + "//BungeeCord.jar");
    processBuilder.directory(new File(path));
    Process process = processBuilder.start();

共有1个答案

羿经武
2023-03-14

新的子流程只是在等待输入。您的调用应用程序必须通过向子进程的STDIN流发送数据来提供输入。您可以与子进程共享调用方进程自己的STDIN流:

// BEFORE calling `processBuilder.start()`
processBuilder.inheritIO();

或向子进程的STDIN流发送数据

// AFTER calling `processBuilder.start()`
byte[] console = String.format("This is send to subprocess%nas two lines").getBytes();
try(var stdin = process.getOutputStream()) {
    stdin.write(console);
}

或者只使用process.getOutputStream().close()关闭STDIN。

您还需要检查STDOUT和STDERR流以及进程退出代码,否则您将不知道是否存在错误-使用processBuilder.redirecterStream(true)processBuilder.redirectOutput(新文件(“STDERR.txt”))然后使用process.waitfor()

 类似资料:
  • 问题内容: 我正在尝试用Python创建一个简单的IRC客户端(这是我学习该语言时的一个项目)。 我有一个循环,可以用来接收和解析IRC服务器发送给我的内容,但是如果我使用它raw_input来输入内容,它将停止循环,直到我输入某些东西为止(显然)。 如何在不停止循环的情况下输入内容? 提前致谢。 (我认为我不需要发布代码,我只想输入一些内容,而while 1循环不会停止。) 编辑:我在Windo

  • 问题内容: 在C / Linux / OS X上如何不阻塞控制台IO? 问题答案: 你不是,真的。TTY(控制台)是一个非常有限的设备,您几乎不做非阻塞I / O。当你看到的东西,看起来像非阻塞I / O,说在诅咒你做什么/ ncurses的应用程序,被称为 原始I / O 。在原始I / O中,没有字符的解释,没有擦除处理等。相反,您需要编写自己的代码来在执行其他操作时检查数据。 在现代C程序中

  • 我正在使用Java Mission Control来配置我的应用程序。“Threads”选项卡中有用的度量之一是每个线程被阻塞的次数。然而,我似乎找不到一种方法来获取线程被阻塞在哪些代码行上。是否有一种方法--通过编程或通过JMC--来确定阻塞发生在哪里?

  • 问题内容: 我有这段代码可以在Linux中从Serial读取,但是我不知道在读取SerialPort时阻塞和非阻塞之间有什么区别,在哪种情况下哪个更好? 问题答案: 您提到的代码是IMO编码和注释不当的代码。该代码不符合POSIX的可移植性惯例,如正确设置终端模式和POSIX操作系统的串行编程指南中所述。该代码没有提到它使用非规范(也称为原始)模式,并且重用了“阻塞”和“非阻塞”术语来描述 VMI

  • 我完全混淆了,,。 哪个是阻塞,哪个不是? 我的意思是如果我使用父进程是否等待子进程返回/才继续执行。 如何影响这些调用?

  • OpenResty 的诞生,一直对外宣传是同步非阻塞(100% non-blocking)的。基于事件通知的 Nginx 给我们带来了足够强悍的高并发支持,但是也对我们的编码有特殊要求。这个特殊要求就是我们的代码,也必须是非阻塞的。如果你的服务端编程生涯一开始就是从异步框架开始的,恭喜你了。但如果你的编程生涯是从同步框架过来的,而且又是刚刚开始深入了解异步框架,那你就要小心了。 Nginx 为了减