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,以便我可以按照正常情况使用它,同时应用程序继续运行。密码验证/设置后不再使用终端。
答案 0 :(得分:2)
我不认为正在运行的进程可以将自身从前台切换到后台,从其输入和输出中分离。当然,适当复杂的shell可以使用作业管理来执行后台运行任务(在大多数UNIX shell中,ctrl-Z
,fg
,bg
等。)
在Java中,我能想到的最好的是编写两个程序:
ServerSocket
开始,它会侦听一个连接,它希望在该连接上接收身份验证信息。只有在发生这种情况时才会完全初始化并进入其主要监听循环。您需要执行一些简单的脚本来同时启动这两个程序。没有理由为什么两个程序都必须是Java - 在UNIX上我很想使用netcat将密码喷入服务器。
为了安全起见,请确保套接字使用localhost网络。在UNIX上,它可以是UNIX域套接字。
当然,您的两个进程可以使用许多通信方法 - 文件,共享内存,管道,TCP套接字...... - 这是一个选择一个足够安全的信息来处理您之间传递的信息它们。