The nohup command in AIX has the
ability to “nohup” an existing process and protect if from hangup signals. Using the -p
flag, an existing, running process can be “nohup’ed” and told to ignore SIGHUPs.
"Why is this useful?" I hear you ask.
Well, I'll often start a "long running" process
on a system at work, like a backup for instance. I'll sometimes forget to use the nohup
command, so that my long running job will ignore any SIGHUPs and continue
running, say for example if my ssh session to the server dies. The nohup command
also generates a nohup.out file to capture any
messages (errors or otherwise) generated by the process e.g.
$ nohup ./processname
&
$ ls –l
nohup.out
-rw------- 1 cgibson
staff 0 May 26 19:42 nohup.out
In older releases of AIX, if I forgot to use nohup, I
had two choices. I could either stop the process and start it again with nohup (often not desirable or possible) or I could
leave my ssh session logged in on my work PC and hope that it didn't power down
or crash or that my ssh connection did not drop over night.
Fortunately with more recent releases of AIX, this is not
a problem anymore. If I forget to “nohup” a process, I can use the -p
flag to inform the already running process that it should ignore all hangup
(SIGHUP) signals. This will allow the process to continue running if my ssh
session (terminal) dies and will also capture any output from the process into
the nohup.out file,
so I don’t lose any important output from the process.
Here’s an example. I’m at work, it's 5pm and I've started
a "long running" process named mycmd. This was started
via an ssh (Putty) session from my PC.
$
./mycmd
; Partial
output from topas showing mycmd running.
Name PID
CPU%
mycmd 823432
98.8
; proctree
output displaying PIDs associcated with mycmd and the associated ssh session
(tty).
$ proctree
823432
520394 -ksh
585738
-ksh
823432
/home/cgibson/mycmd
I've walked out the door and I'm now on my way home for
the evening.
Oh no! I've forgotten to start the process with nohup! I don't want to restart my process but I want to protect
it from SIGHUPs, while it executes after hours.
No problem, I'll use nohup to modify the
running process, so I can rest assured it will continue to run, even if my ssh
connection drops over night. From home I start a new ssh session on the server
and run nohup against
the running process:
$ nohup -p
823432
At work the next morning, I discover that my original
Putty session has indeed dropped! But, my process is still happily running! :)
; Partial
output from topas showing mycmd still
running.
Name PID
CPU%
mycmd 823432
99.3
$ proctree 823432
520394 -ksh
585738 -ksh
823432 /home/cgibson/mycmd
You might find this useful if you ever forget to “nohup”
a process and don’t want to restart it again.
http://publib.boulder.ibm.com/infocenter/aix/v6r1/index.jsp?topic=/com.ibm.aix.cmds/doc/aixcmds4/nohup.htm
Tags:
nohup
aix
chris
gibson