Java 进程在Jsch退出后死亡

Java 进程在Jsch退出后死亡,java,ssh,jsch,Java,Ssh,Jsch,我有一个shell脚本,它使用“catalina.sh start”启动tomcat。该脚本运行良好,并启动tomcat,即使我退出ssh会话,tomcat也不会停止运行 我试图从Jsch调用这个脚本 shell = new JSch(); session = shell.getSession(user, host, SSH_DEFAULT_PORT); session.setConfig(config); session.setPassword(password); session.conne

我有一个shell脚本,它使用“catalina.sh start”启动tomcat。该脚本运行良好,并启动tomcat,即使我退出ssh会话,tomcat也不会停止运行

我试图从Jsch调用这个脚本

shell = new JSch();
session = shell.getSession(user, host, SSH_DEFAULT_PORT);
session.setConfig(config);
session.setPassword(password);
session.connect();
commandChannel = (ChannelExec) session.openChannel("exec");
commandChannel.setCommand(command);
commandChannel.setPty(true);
commandChannel.connect();
这会调用我的脚本,tomcat会启动,但一旦进程退出,tomcat就会收到一个关闭信号,它就会关闭。我尝试使用setDaemonThread,但没有成功。知道为什么会这样吗


更新:该脚本还执行一些与启动tomcat无关的sudo操作,因此需要tty。用户在sudoers中设置为不需要密码,因此不需要提示。

我认为您不应该为命令分配pty,以便该命令在后台运行而不连接到终端。如果改为
commandChannel.setPty(false)
会发生什么

编辑:您是否实际运行sudo并在脚本中提供密码?您不应该将其作为root运行吗?
如果您希望使用sudo,则在运行命令后,使用
disown
nohup
()

将它们从终端分离出来。此问题是否仅在会话立即退出时才会发生?听起来您运行的命令生成了一个单独的进程。也许您没有给其他进程足够的时间生成


如果使用执行命令会发生什么?

我得到“sudo:对不起,您必须有一个tty才能运行sudo”,这就是我首先添加它的原因。