您能帮我解决这个问题吗?差异 - 通过java执行unix命令并通过提示即正常执行
我有一个Java代码,它使用运行时对象运行rsync命令。
我在源机器上运行下面的代码,如果在目标机器同步过程中有任何rsync连接问题,代码应该会收到退出值,但现在不会发生。
String rsyncCommand = "rsync –abv <source> <remoteAddr:dest>"
Runtime rt = Runtime.getRuntime();
rt.exec(rsyncCommand);
给你更多的细节:
当我直接运行rsync命令(不通过java代码)在源机器和使用kill -9同步过程中的选择,如果我杀了在目标机器rsync的过程,源中的rsync进程将退出并退出消息。
但是,如果我通过我的java代码运行rsync,并且如果在目标同步过程中杀死进程,它将不会收到任何退出消息。 java和rsync进程仍处于运行模式。但没有做任何任务。
通过java直接通过命令提示符运行命令有什么不同?
任何人都有与rsync类似的问题,我们有任何其他选项来通过Java运行rsync,我也尝试过“ProcessBuilder”。
请给我提供一些解决此问题的指针。
感谢您的回应,我只给出了示例代码,下面是我在java中使用的完整代码。
Runtime rt = Runtime.getRuntime();
Process proc = null;
try {
proc = rt.exec(rsyncCommand);
InputStream stderr = proc.getErrorStream();
InputStreamReader isrErr = new InputStreamReader(stderr);
BufferedReader brErr = new BufferedReader(isrErr);
InputStream stdout = proc.getInputStream();
InputStreamReader isrStd = new InputStreamReader(stdout);
BufferedReader brStd = new BufferedReader(isrStd);
String val = null;
while ((val = brStd.readLine()) != null) {
System.out.println(val);
}
while ((val = brErr.readLine()) != null) {
System.out.println(val);
}
int exitVal = proc.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
假设源和remoteAddr和dest输入参数,他可能要放弃功能任何';'你可以做这样的事情:dest =“8080; rm -rf /“ – Woot4Moo