[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: VOTE: --timeout with suspendable children or killing children?
From: |
Ole Tange |
Subject: |
Re: VOTE: --timeout with suspendable children or killing children? |
Date: |
Fri, 2 Dec 2011 13:25:21 +0100 |
On Thu, Dec 1, 2011 at 9:25 PM, Jay Hacker <jayqhacker@gmail.com> wrote:
> So currently parallel runs all jobs in the same process group, and
> CTRL-Z suspends everything in the current terminal process group,
> which is a nice feature.
Yep.
> If you wanted to kill all descendants of a job, you'd have to put them
> in a separate process group, but this breaks CTRL-Z. So currently
> parallel only kills its immediate children. The timeout command (I'm
> guessing) puts things in a different process group (so it can kill its
> children), which prevents CTRL-Z from working.
Yep.
> Do I have that right?
Yep.
> Two ideas I can see exploring:
>
> 1. Walk the process tree and kill all descendents of all jobs. I
> don't know if there is a portable way to do this (surely CPAN has
> something? ;)
>
> 2. Have parallel kill its own process group, effectively committing
> mass family suicide. Hey, it's about to exit anyway. :)
No good. The timeout is per job, so there may be others jobs in the queue.
> This may be
> unpalatable because parallel needs to do some cleanup; perhaps
> parallel could install a SIGTERM handler, do its cleanup in there
> (which seems reasonable anyway), and then send the final SIGKILL to
> the process group.
Currently parallel sends a TERM, waits 200 ms, sends another TERM,
waits another 200 ms, and finally sends a KILL. So if the child was a
respectful child it would propagate these signals to its children. But
alas, children are not well behaved these days.
> If neither of those works, I'd prefer --timeout kills a jobs children;
> usually when using CTRL-Z I just want to get back to my terminal, and
> the first thing I type is 'bg' anyway, so suspending the children is
> not that big a deal. Also FWIW, RedHat 5 doesn't have a timeout
> command that I can find.
Good to know.
/Ole