gpt4 book ai didi

java - 将 java linux 进程留给用户或操作系统控制

转载 作者:太空宇宙 更新时间:2023-11-04 04:28:43 24 4
gpt4 key购买 nike

代码:

        String line;
ProcessBuilder telnetProcessBuilder = new ProcessBuilder("/bin/bash");
telnetProcessBuilder.redirectErrorStream(true);
Process telnetProcess = telnetProcessBuilder.start();
BufferedReader input = new BufferedReader(new InputStreamReader(telnetProcess.getInputStream()));
BufferedWriter output = new BufferedWriter(new OutputStreamWriter(telnetProcess.getOutputStream()));
output.write("telnet <hostname> -l <username>\n");
output.flush();
output.write("<password>\n");
output.flush();
output.write("cd <path>\n");
output.flush();
output.write("<script-file1>\n");
output.flush();
output.write("<script-file2>\n");
output.flush();
output.write("\n");
output.flush();
while((line = input.readLine())!= null)
{
System.out.println(line);
if(line.indexOf("<some final text after <script-file2>>")>-1)
{
line = input.readLine();
System.out.println(line);
break;
}
}
output.close();
input.close();
//output.write("exit\n");
//output.flush();
//telnetProcess.destroy();

根据上面的代码,java启动一个linux进程/bin/bash,然后telnet到远程系统,在那里它为应用程序执行一些脚本,然后它必须将输入、输出流和/bin/bash进程控制权留给用户,并以0代码退出。

现在,在制作 jar 文件后,我将从 Linux 命令(GNOME)终端调用它,然后进程应该在 java 代码(其执行)结束时将自身和 IO 流的控制权留给用户,用户将在其中输入一些命令,例如系统状态和诊断,或者在输入取决于应用程序的特定字符时退出,这是要求。

但是,问题是 java 在最后一行之后退出,因此即使我不退出或销毁该进程,该进程也是如此。是的,这是一种自然行为,但是如果有人已经遇到了这个问题,有人可以告诉我如何实现这一目标吗?好吧,我无法显示脚本文件的内容以及您可能需要的其他东西,因为它是公司所有的。

谢谢各位的解答

阿舒托什

最佳答案

我认为您的 java 应用程序在 script-file2 最后一行之后终止,实际上这是 while 循环内的 if 条件。

如果我理解正确的话,您希望您的java应用程序(1)打开到远程计算机的telnet连接,(2)自动发出一些命令,然后(3)让用户手动发出其他命令,最后(4)当用户发出退出命令时关闭telnet连接。我猜 (1) 和 (2) 已经完成并在您的代码中工作。那时,我认为您必须为您的应用程序构建一些用户界面,用户在其中输入命令,然后将这些命令通过管道传输到 telnet 进程(就像您对初始命令所做的那样,使用output.write(userCommand);output.flush();),然后继续执行此操作,直到用户输入的命令是exit(或其他命令)。

关于java - 将 java linux 进程留给用户或操作系统控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5867240/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com