java启动新进程_如何从Java程序启动完全独立的进程?

我正在开发一个用Java编写的程序,对于某些操作,它使用用户配置的命令行启动外部程序。目前它使用Runtime.exec()并且不保留Process引用(启动的程序是文本编辑器或存档实用程序,因此不需要系统输入/输出/错误流)。

但是这有一个小问题,因为当Java程序退出时,在退出所有启动的程序之前它并没有真正退出。

如果启动的程序完全独立于启动它们的JVM,我会更喜欢它。

目标操作系统是多个,Windows,Linux和Mac是最小的,但任何带有JVM的GUI系统都是真正需要的(因此实际命令行的用户可配置性)。

有谁知道如何让启动的程序完全独立于JVM执行?

编辑以回复评论

启动代码如下。代码可以启动位于特定行和列的编辑器,也可以启动存档查看器。配置的命令行中的引用值被视为ECMA-262编码,并被解码并且引号被剥离以形成所需的exec参数。

这次发射发生在美国东部时间。

static Throwable launch(String cmd, File fil, int lin, int col) throws Throwable {

String frs[][]={

{ "$FILE$"  ,fil.getAbsolutePath().replace('\\','/') },

{ "$LINE$"  ,(lin>0 ? Integer.toString(lin) : "") },

{ "$COLUMN$",(col>0 ? Integer.toString(col) : "") },

};

String[] arr; // array of parsed tokens (exec(cmd) does not handle quoted values)

cmd=TextUtil.replace(cmd,frs,true,"$$","$");

arr=(String[])ArrayUtil.removeNulls(TextUtil.stringComponents(cmd,' ',-1,true,true,true));

for(int xa=0; xa

if(TextUtil.isQuoted(arr[xa],true)) {

arr[xa]=TextDecode.ecma262(TextUtil.stripQuotes(arr[xa]));

}

}

log.println("Launching: "+cmd);

Runtime.getRuntime().exec(arr);

return null;

}

只有从我的IDE启动程序时才会出现这种情况。我正在关闭这个问题,因为问题只存在于我的开发环境中; 这不是生产中的问题。从其中一个答案中的测试程序,以及我已经进行的进一步测试,我感到满意的是,任何平台上的程序的任何用户都不会看到这个问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值