I tested it quite well, here is the case: When creating the ssh server I have this:
sshd.setShellFactory(new PseudoTerminalFactory("/system/bin/sh", "-i")); The PseudoTerminalFactory has this: @Override public Command create() { return new InvertedShellWrapper(new PseudoTerminal()); } And the "PseudoTerminal implements InvertedShell" contains the following functions: destroy() exitValue() getErrorStream() getInputStream() getOutputStream() isAlive() start(Map<String, String> env) Now here is the thing, when a session is created and the user: - closes it - or the server is stopped The destroy and exitValue functions are being called. In the destroy function we stop the shell process (which is started in the start function). However, if a user has a shell connection and doesn't do anything, default after 10 minutes the idletimeout will have passed and the user gets a timeout error and gets disconnected. HOWEVER, after that the destroy and exitValue are never called, so the isAlive function will continue being called (always returns true till the destroy function is called) and we will have an endless running thread. Next time we start the server we get an error the port is in use, etc. And all the time the checking of isAlive of that session will just continue. So is there a solution? Or am I missing something.. Thanks! 2012/9/10 Maarten Smit <maartensm...@gmail.com> > Hello, > > I have implemented my own ShellFactory. Everything works ok now, if the > user connects and disconnects the destroy function of the custom > shellfactory is called. However, when a user is connected (for example > through putty) and the connection timeouts the user is disconnected but the > destroy function of the shellfactory isn't called.. So the shell session is > still running while the user is disconnected.. > > Maybe someone can help? Since setting the idle timer to 0 isn't really an > option. > > Thanks! > > Maarten >