从jvm退出后的java内部启动bash脚本

时间:2011-07-23 01:42:56

标签: java linux bash process processbuilder

我正在尝试从Java内部运行一个bash脚本,它将在JVM退出后继续运行。我目前的尝试看起来像这样:

String[] linCmd = {"/bin/bash", "-c", "\"set +m; shopt -u huponexit; nohup "
   + "myScript.sh 2>&1 > /dev/null &\""};
pb = new ProcessBuilder(linCmd);
//Other stuff to monitor and start pb

但是我没有看到myScript.sh真正启动(在顶部或ps)。顺便说一句,单独的bash shell的原因是因为我需要set +m并且不想用它破坏原始版本。此外nohupshopt -u huponexit可能是多余的,但我已经尝试过,而不是单独使用它们,似乎无法使其正常工作。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

尝试一下,不要在“set + m ...&”附近添加额外的引号通过将整个事物包含在该数组的第三个元素中,你告诉java这整个事情是第三个参数。引号应该是不需要的,我认为它们可能会干扰。

答案 1 :(得分:0)

您是否可以介绍该过程,添加对后台进程disown的调用,然后让shell退出?

  

disown [-ar] [-h] [jobspec ...]

     

如果没有选项,则会从活动作业表中删除每个jobspec。如果给出了-h选项,则不会从表中删除每个jobspec,但会对其进行标记,以便在shell收到SIGHUP时不会将SIGHUP发送到作业。如果不存在jobspec,并且未提供-a和-r选项,则使用当前作业。如果未提供jobspec,则-a选项表示删除或标记所有作业;没有jobspec参数的-r选项将操作限制为正在运行的作业。除非jobspec未指定有效作业,否则返回值为0.