Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: Stopping subprocesses

by cdarke (Prior)
on Aug 24, 2010 at 10:05 UTC ( [id://856895]=note: print w/replies, xml ) Need Help??


in reply to Stopping subprocesses

For background information, it might be worth reading (on Linux) man 7 signal.

When you hit CTRL-C then a SIGINT is sent to all the processes in the foreground group. When you use the shell built-in command kill the shell will send SIGTERM. If you are getting different behavior with different signals then someone must be trapping the SIGTERM. Ignore signals are usually inherited.

In addition, usually, when a parent dies it sends a SIGHUP to the child, which might kill the child, again depending on signal handling, for example using the nohup program or trapping SIGHUP will prevent this.

Keeping track of PIDs should not be difficult, it is the return value of fork in the parent. Provided the children of B are not ignoring hangups, then killing B should bring the children down as well.

Alternatively, from kill:
"Unlike in the shell, if SIGNAL is negative, it kills process groups instead of processes."
Provided the children have not switched process groups (which a daemon might do) then that might be a safer bet. It is not worth calling a shell's version of kill using system when there is one built-in to perl.

Replies are listed 'Best First'.
Re^2: Stopping subprocesses
by rowdog (Curate) on Aug 24, 2010 at 11:47 UTC

    I agree, kill is the way to go. And here's a link to Debian's current man 7 signal.

Re^2: Stopping subprocesses
by James Board (Beadle) on Aug 24, 2010 at 13:57 UTC
    Disagree. Keeping track of PIDs is difficult. If A starts B and B starts C, and C starts D, etc, how does A figure out all of those PIDs? Does each of B, C, D, etc open a socket to A and send the child PIDs?
Re^2: Stopping subprocesses
by James Board (Beadle) on Aug 24, 2010 at 14:21 UTC
    I appreciate the Unix signals lecture. In my simple example, C isn't ignoring hangups, yet when I kill B, it's child C isn't killed. So I'm not sure you read all of my original question.
Re^2: Stopping subprocesses
by James Board (Beadle) on Aug 24, 2010 at 14:23 UTC
    These last two replies should be in reference to cdarke's post. But the perlmonks website put them somewhere else: I'm not sure if this is because of a bug in the perlmonks website, or mozilla.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://856895]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others goofing around in the Monastery: (3)
As of 2024-04-26 06:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found