JBOSS process quits on shell exit

I decided to add this here as it's related to bash (IMHO) and not necessarily to JBOSS.

The problem started happening a few weeks ago on some of the test systems that I have. When I exit my shell (putty) it hangs forcing me to close the window, which then also stops the JBOSS server. I did not have this problem before, and only a few of the systems have it.

Right now I logon with the following (as the default shell is ksh with "ctrl+d" disabled - set -o ignoreeof):

bash --rcfile /home/admin/my.profile -i ; exit

Notes:

  • I do not have this issue when I logon with ksh.
  • I have also tried setting the shell to bash in /etc/passwd, did not work.
  • The main JBOSS script is called with "nohup" and "&".
  • I have also tried starting the app within "screens", and when I logout it kills both screen and JBOSS processes.

System Info:

$ uname -a
Linux srs576 2.6.18-194.el5 #1 SMP Tue Mar 16 21:52:39 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

$ bash -version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

$ ksh --version
  version         sh (AT&T Research) 93t+ 2010-02-02

Any help is appreciated.
Thanks!

The ssh seems to be overly attached to its children, even for no-terminal command execution. Alas, many signals go to all processes of a terminal. I used to keep losing my mwm (X window manager) when I used SIGINT to stop a shell launched program. You might launch it with cron, which by attempting a relaunch every n minutes also gives auto restart, and then it is not entangled in your ssh terminal session. Of course, it has to be sensitive to prior running instances and exit quietly if they are running. The ssh command-only sometimes works OK (no terminal):

$ ssh localhost -n 'nohup sleep 44 &'
Keyboard-interactive:
PAM authentication
Password: 
Authentication successful.
$ ps -fu $USER | fgrep -v " $$ " | fgrep sleep
UID      PID  PPID C STIME    TTY   TIME COMMAND
myid    6330     1 0 12:57:23 ?     0:00 sleep 44
$

When you close your terminal window, anything that still has open file descriptors referring to the terminal is killed. Anything you run will inherit copies of the terminal file descriptors unless they close them themselves or you close them first.

Run them with nohup to prevent them accidentally keeping around such file descriptors.

nohup commandname ...

Thanks for replies everyone. As I had mentioned in my first post, the script itself is run with "nohup" and placed in the background with "&". The script starts a Java process (JBOSS) and other non java services (via other scripts). Only the java process stops when I logout. The other services are still running.

And what happens when you use at (with nohup and &...) to launch your script?

Do you mean using the "at" command?

Thanks.

The 'at' command is like 'cron' but one-time, with commands on stdin and time on command line. A daemon starts the job, not your session.

I leave daemon processes in all languages running when I log out on all sorts of systems. This seems a bit draconian, almost like a security tool is turned on.

Using a tool like strace/truss/tusc to trace the running daemon into a flat file should tell you what kills it. Be sure to redirect to a file and turn on all the options like follow fork and display thread id. Launch it as:

nohup strace -fvxo /tmp/<your_app>.tr <your_app> <any_app_options> &

These tools are very UNIX-educational, can be used on code where you have no source, can be used on processes already running.

Found the issue. It was actually related to X-Forwarding being enabled in Putty. I'm not sure why, but disabling X-Forwarding solved it.