-----BEGIN PGP SIGNED MESSAGE-----
Dale Dunlea writes:
> > > But sometimes bad things happen. Sometime programs crash.
> > But the pid
> > > of the child process is stored and so when the program restarts, it
> > > knows the pid of the child process of its previous
> > instance. I need to
> > > install a signal handler in the new program instance for
> > the old child
> > > process - to reparent it essentially. I presume there is a way of
> > > doing this, but I'm quite new to process control and all that.
> > btw the most common idiom here would be to either (a) kill
> > the subprocess and start a new one when the new parent
> > starts, or (b) kill the subprocess from the parent's SIGTERM
> > signal handler before it exits.
> > I think a bit more info is needed btw.
>> It's an audio app and the child process is the actual audio player
> program. Killing it an restarting is a little messy. Hence the desire to
> let it play out even though the process that spawned it has died.
I think you'd be better off coming up with a way to kill/restart cleanly
so that the child isn't left running when the parent dies.
The general UNIX idiom is that if you fork a process, and the parent is
killed with SIGINT or SIGTERM, the parent kills the child in response,
before it itself cleans up and exits. This is the general case; it
applies in most cases, apart from "nohup" or when starting a daemon.
However, if you're still keen to keep the child running after the parent
has exited -- what you can do is the following:
- when starting the child: record its PID in a pidfile somewhere on-disk
- when a new parent process is started: check that pidfile to see if a
child is running
- read the PID from that file, and use kill(0, pid) to see if the
process with that ID exists
- do not use SIGCHLD to track if the child is alive or dead, since that
will not work if the child's parent != current process
- instead use kill(0, pid) periodically to poll the child and ensure
it's still running. if kill returns the error ESRCH, the child has
exited and you can deal with that (restart a new one or whatever).
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)
Comment: Exmh CVS
-----END PGP SIGNATURE-----
Maintained by the ILUG website team. The aim of Linux.ie is to
support and help commercial and private users of Linux in Ireland. You can
display ILUG news in your own webpages, read backend
information to find out how. Networking services kindly provided by HEAnet, server kindly donated by
Dell. Linux is a trademark of Linus Torvalds,
used with permission. No penguins were harmed in the production or maintenance
of this highly praised website. Looking for the
Indian Linux Users' Group? Try here. If you've read all this and aren't a lawyer: you should be!