问题标签 [apache-commons-exec]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
296 浏览

java - Apache commons exec 导致 CPU 使用率高

与从终端调用相同的可执行文件相比,通过 commons-exec(为其 I/O 使用管道)调用特定的可执行文件(Jadeo)会导致大量 CPU 使用(超过 30 倍)。空闲唤醒是巨大的。

我已经与可执行文件的开发人员进行了交谈,他们建议使用阻塞 I/O 可能会导致这些过度唤醒。

有没有办法将非阻塞 I/O 与 Apache commons-exec 一起使用?

或者是否有另一个使用非阻塞 I/O 的库?

0 投票
1 回答
167 浏览

java - 程序在试图杀死进程时挂起,直到最终被杀死

我正在修复一个导致我们的 CI/CD 管道失败的错误。在集成测试期间,我们启动了一个本地数据库实例。为了做到这一点,我们使用一些 mariadb 包装器从 java 代码库中启动它。

这个过程可能(可能)需要很长时间才能完成,这将导致我们的测试超时。在这种情况下,我们添加了一个功能,如果进程无法在 20 秒内安装并应重试,则终止该进程。

这部分似乎正在工作。

尝试破坏进程时会出现奇怪的情况。似乎随机需要大约 2-3 分钟才能解锁。这是有问题的,原因与上述问题有问题的原因相同。

在对底层库进行调查后,我们似乎正在使用 ExecuteWatchdog 来管理进程。这是一些阻塞的代码是:

除此之外,Mac/Linux 上还有不同的行为。如果我做类似的事情resultHandler.waitFor(1000) // Wait with 1000ms timeout before just exiting,它会在 macbook 上正常工作,但在 linux 上我会看到如下错误:java.io.FileNotFoundException: {{executable}} (Text file busy)

对此有什么想法吗?

我做了一些研究,似乎watchDog.destroyProcess发送的是 SIGTERM 而不是 SIGKILL。但是我没有任何钩子来获取Process对象以便将其发送 KILL 。

谢谢。

0 投票
1 回答
66 浏览

java - 尝试使用带有字节缓冲区的 Apache Common exec 将输出从一个命令推送到 java 中的另一个命令

我的计划是使用ByteBufferApache Common Exec将一个命令的输出作为输入发送到另一个命令。

我可以使用PipedOutputStreamand来做到这一点PipedInputStream,下面是可以正常工作的代码。

上面的代码工作正常,但我想从第一个命令中获取输出,并将其放入ByteBuffer 并提供它作为下一个命令的输入。

下面是我正在尝试执行的代码,但它没有按预期工作(我能够看到缓冲区被填充,但它没有写入磁盘,当我使用PipedOutputStreamand时发生在上面的代码中PipedInputStream)。

在这种情况下,我使用ByteBufferBackedOutputStreamByteBufferBackedInputStream是自定义类,我从 SO 的另一篇文章中获得了实现。

0 投票
1 回答
60 浏览

java - 无法执行 mysql 命令以使用 Apache Commons Exec 恢复转储

我的目标是使用 mysql 命令恢复 Mysql 转储。

我在使用 ProcessBuilder 和 Apache Commons Exec (1.3) 的代码之间有明显的行为差异。

这段代码工作得很好

但是这个(使用 Apache Commons Exec)

因以下错误而崩溃:

Apache Commons Exec 出错

请注意 Apache Commons Exec 解释的命令末尾缺少的 '。 命令行解释

有人知道如何使其与 Apache Commons Exec 一起工作吗?

非常感谢你的帮助,西尔万

0 投票
0 回答
20 浏览

java - commons-exec 的 ExecuteWatchdog 无法杀死 bash 脚本的子进程

我有一个在内部运行 python 的脚本文件。例如

然后我使用 common-exec 启动这个脚本,然后我尝试通过 ExecuteWatchDog 终止这个进程。我发现它可以杀死父bash进程,但无法杀死这个脚本文件中的python进程。谁能告诉我如何通过 ExecuteWatchDog 杀死这个子 python 进程?谢谢

0 投票
0 回答
21 浏览

java - commons-exec 的 ExecuteWatchdog#destroyProcess 没有杀死它的子进程

我使用 commons-exec 启动一个脚本,该脚本将在该脚本中启动子进程。而当我使用 ExecuteWatchdog#destroyProcess 时,我可以杀死这个脚本进程,但我发现子进程还活着。有没有办法杀死子进程?谢谢

0 投票
1 回答
30 浏览

java - 在 OSX 上的 Eclipse 下从 Java 程序运行 Jekyll

我有一个 java 程序,它做了一些准备,然后在它准备的内容上调用 Jekyll。Jekyll 是作为 gem 安装在本地 PC 上的 Ruby 程序。在 windows 和 linux 上没问题,但是在 OSX 上运行时,在 eclipse 调试器下,Jekyll 不运行。大概这是因为交互式 shell 问题(Jekyll 在终端上运行良好)。

这是我的java代码:

这导致该过程的以下输出:

其次是 Jekyll 的标准文档 - 所以 Jekyll 正在运行但没有获取参数。同样的事情发生在终端:

在终端中,我可以这样做:

因此,当整个命令包含在“”中时,参数可以正常工作。但是将''(或“”)放在java代码中会导致

据我所知,这意味着没有名为“Jekyll build ...”的文件。

所以我不知道如何在 OSX 上从我的 java 代码中调用 Jekyll。可能吗?