gpt4 book ai didi

java - 使用 java 的 Process.exec 启动的进程始终返回退出代码 0

转载 作者:行者123 更新时间:2023-11-30 06:04:52 24 4
gpt4 key购买 nike

我使用 java Process.exec 启动 shell 脚本(出于某种原因),它们总是返回 0 退出值,无论脚本本身的退出值如何(我可以通过在操作系统中运行所述脚本来检查) shell。有关更多信息,这些脚本使用 gradle-node-plugin 运行 gradle 任务。有关此问题的任何指示吗?

总体而言,设置如下:

软件

  • Linux 桌面 4.4.0-130-generic#156~14.04.1-Ubuntu SMP 6 月 14 日星期四 13:51:47 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux`

  • java 版本“1.8.0_171”Java(TM) SE 运行时环境(版本 1.8.0_171-b11)Java HotSpot(TM) 64 位服务器 VM(内部版本 25.171-b11,混合模式)`

Shell 脚本的执行方式为

Process process = Runtime.getRuntime().exec(new String[]{"sh", "-c", testScript});

返回值是通过test.exitValue()获得的,并且似乎始终为0。

Shell 脚本调用 gradle ./gradlew project:clean project:test.

Gradle 脚本依赖于 gradle-node-plugin

plugins {
id "com.moowork.node" version "1.2.0"
}

task test(type: NodeTask) {
script = file('./node_modules/mocha/bin/mocha')
args = ['test/sometest.js']
}

最佳答案

Gradle 脚本阻止将退出代码返回到同一 shell,甚至结束调用 shell。这是通过使用环境变量 GRADLE_EXIT_CONSOLE 来完成的(任意非空值就足够了):

  • 如果设置:脚本结束 shell 并返回退出代码。
  • 如果未设置:脚本将退出代码返回到调用 shell,允许其继续处理命令。

如果您通过 Runtime.exec 调用 gradle,它会创建一个新的 shell,因此您需要在调用脚本之前设置该变量,以便在 shell 结束后获得退出代码.

关于java - 使用 java 的 Process.exec 启动的进程始终返回退出代码 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51545885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com