如何让Java cmd / terminal / shell程序发布?

时间:2017-09-12 14:49:01

标签: java

public static void main(String[] args){
    System.out.println("enter password");
    char[] password = System.console.readPassword();
    if(passwordOK(password)){
        //let go of shell, and continue running.
    }
}

我希望Java应用程序继续运行,但停止" hogging" cmd /终端。释放cmd / terminal,以便我可以按照正常情况使用它,同时应用程序继续运行。密码验证/设置后不再使用终端。

1 个答案:

答案 0 :(得分:2)

我不认为正在运行的进程可以将自身从前台切换到后台,从其输入和输出中分离。当然,适当复杂的shell可以使用作业管理来执行后台运行任务(在大多数UNIX shell中,ctrl-Zfgbg等。)

在Java中,我能想到的最好的是编写两个程序:

  • 您的长时间运行的服务器在后台运行,并以打开ServerSocket开始,它会侦听一个连接,它希望在该连接上接收身份验证信息。只有在发生这种情况时才会完全初始化并进入其主要监听循环。
  • 另一个程序在前台运行。它等待套接字变为可用,连接,在终端提示输入密码,将其写入套接字,关闭并终止

您需要执行一些简单的脚本来同时启动这两个程序。没有理由为什么两个程序都必须是Java - 在UNIX上我很想使用netcat将密码喷入服务器。

为了安全起见,请确保套接字使用localhost网络。在UNIX上,它可以是UNIX域套接字。

当然,您的两个进程可以使用许多通信方法 - 文件,共享内存,管道,TCP套接字...... - 这是一个选择一个足够安全的信息来处理您之间传递的信息它们。