启动
cmd与
/c交换机而不是
/k和摆脱的
start:
Process p = Runtime.getRuntime().exec( "cmd /c SQLscriptsToRun.bat" + " -UuserName -Ppassword" + " projectName");
/k告诉
cmd:“运行该命令,然后保持打开状态”,而显示
/c“运行该命令,然后退出”。
/k用于交互式,您要初始化批处理文件,然后仍使用控制台。
你的主要问题就在这里,然而,就是要创建 另一个进程
使用
start。要运行批处理文件,这完全没有必要,并且可以防止您知道批处理何时完全运行,因为Java引用的是
cmd您启动的原始进程,而不是您使用的原始进程
start。
原则上,现在看起来如下所示:
- Java程序启动
- Java程序运行
cmd
并指示其运行start foo.bat
并保持打开状态以进行交互式输入(/k
) Java存储进程ID(PID 42),以便以后引用该进程
cmd
(PID 42)开始cmd
(PID 42)运行start foo.bat
start foo.bat
启动的另一个实例cmd
,因为这是运行批处理文件应采取的措施cmd
(PID 57005)开始cmd
(PID 57005)运行foo.bat
cmd
(PID 57005)退出 (这表示您想了解的事件)cmd
(PID 42)显示提示并听从等待输入(对于他们而言,未知的是用户从未看到过该提示,并且永远不会输入…但是cmd
(PID 42)等待…)- Java喜欢知道该过程是否完成并检查PID 42
是的,它仍然在那里。怎么办?
您想要的(以及上述更改将完成的工作)是:
- Java程序启动
- Java程序运行
cmd
并指示其foo.bat
在运行命令(/c
)后运行并关闭 Java存储进程ID(PID 42),以便以后引用该进程
cmd
(PID 42)开始cmd
(PID 42)运行foo.bat
cmd
(PID 42)退出- Java喜欢知道该过程是否完成并检查PID 42
糟糕,该过程已消失,批处理文件已运行。



