首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以java的Process.exec启动的进程总是返回退出代码0

以java的Process.exec启动的进程总是返回退出代码0
EN

Stack Overflow用户
提问于 2018-07-26 19:02:12
回答 1查看 710关注 0票数 1

我用java Process.exec启动shell脚本(出于原因),它们总是返回0退出值,而不管脚本本身的退出值如何(我可以通过在OS中运行上述脚本来检查它。有关其他信息,这些脚本使用gradle-node-plugin运行gradle任务。对这个问题有什么建议吗?

总的来说,设置如下:

软件

  • Linux桌面4.4.0-130-通用#156~14.04.1-Ubuntu清华6月14日13:51:47 UTC 2018 x86_64 GNU/Linux`
  • java版本"1.8.0_171“Java(TM) SE运行时环境(build 1.8.0_171-b11) Java HotSpot(TM) 64位服务器VM (build 25.171-b11,混合模式)

执行Shell脚本时,

代码语言:javascript
复制
Process process = Runtime.getRuntime().exec(new String[]{"sh", "-c", testScript});

返回值是用test.exitValue()获得的,并且似乎总是0。

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

Gradle脚本依赖于gradle-node-plugin

代码语言:javascript
复制
plugins {
    id "com.moowork.node" version "1.2.0"
}

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-27 10:22:49

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

  • 如果设置:脚本结束shell并返回退出代码。
  • 如果没有设置:脚本将退出代码返回给调用的shell,允许它继续处理命令。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51545885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档