On Sat, Jan 12, 2008, mouss wrote:
Les Mikesell wrote:
Jerry Geis wrote:
Is there a command that will monitor a process for exiting (crash or normal exit) and then execute another command based on the said process no longer being active?
Or is there a "wrapper" command that runs a process and when that process exists due to crashing or just exiting normally) that another process can be run.
Why not use a shell script as a wrapper? If you don't put something in the background with an & on the line, the next line will execute when/if the program started on the current line exits. There are nearly always other copies of the shell running anyway so you get shared-text efficiency. If you just want to keep restarting the same program, something like this should run forever.
while : do my_program done
This has two issues (at least):
- if the program is a daemon, it returns immediately, so the scrpit will
try to start the program again and again
- if the script gets a signal, it will be killed. back to start.
If you use ``kill -0 pid'' it shouldn't affect the running process, and will return success ($? = 0) if the process is running, and fail otherwise.
A fairly standard way of checking things like this is:
pidfile=/var/run/progname.pid progname_signal() { [ -f $progname_pidfile ] && kill -$1 `cat $progname_pidfile` } if progname_signal 0 then echo is running else echo not running fi
Bill -- INTERNET: bill@celestial.com Bill Campbell; Celestial Software LLC URL: http://www.celestial.com/ PO Box 820; 6641 E. Mercer Way FAX: (206) 232-9186 Mercer Island, WA 98040-0820; (206) 236-1676
"If taxation without consent is robbery, the United States government has never had, has not now, and is never likely to have, a single honest dollar in its treasury." -- Lysander Spooner, Letter to Grover Cleveland 1886