Subject: Re: job-control shell trouble
To: der Mouse <mouse@Rodents.Montreal.QC.CA>
From: Andrew Brown <atatat@atatdot.net>
List: tech-userlevel
Date: 12/27/2004 23:51:47
On Mon, Dec 27, 2004 at 08:48:45PM -0500, der Mouse wrote:
>>> It knows that *process* C is gone. It doesn't know whether *pgrp* C
>>> is gone or not. [...]
>
>>>> The situation is really more interesting when the shell forks a
>>>> pipeline, but this is not the situation here.
>>> Oh, there may be other processes in the pgrp, but that's not very
>>> relevant. If any of them are still alive (or dead but unreaped),
>>> the pgrp is still around, and B knows it.
>> Well, you usually don't end up in a situation where you want to put a
>> process in an existing process group.
>
>Usually? Maybe not - I have no experience actually _using_ this shell
>yet. But it will happen often enough that I want to make sure it works
>right.
if A->B->C->C' and then C gives up the ghost and B->D, why not simply
put D into pgrp D? if C' isn't dead, you can't use C as a pgrp.
otoh, if C' never existed, you still can't use C because it (the pgrp)
is gone.
>> For example when you fork a pipeline, you can make the last process
>> in the pipeline be the parent of all other processes. If you do
>> that, then this process will still be around after after the other
>> processes in the pipeline have been reaped.
>
>That's not acceptable because it means the shell can't tell when those
>other processes die. This is a problem both for user interaction (you
>can't show the user their status) and because if that last process dies
>early you can't block waiting for the others to die before considering
>the pipeline complete.
>
>My "new shell" is not yet another sh/csh/whatever clone. I'm trying to
>do something at least somewhat new, and it involves putting new
>processes into existing process groups in enough non-pathological cases
>that I want to make sure I do it right. I'll be happy to make my
>current design document available if you're interested.
i don't get why. then again, i never wrote a shell that did job
control. :)
>> Even if you killed that process so that it died before the processes
>> in the previous pipeline stages did, you really don't need to put
>> those processes in the proper process group...
>
>They need to be in the proper process group so that the correct sets of
>processes get tty-generated signals, if nothing else.
then it sounds to me like you'd want C' to be in a different process
group from the current process group so that it didn't get signals
aimed at a different set of processes (aka pgrp D). no?
--
|-----< "CODE WARRIOR" >-----|
codewarrior@daemon.org * "ah! i see you have the internet
twofsonet@graffiti.com (Andrew Brown) that goes *ping*!"
werdna@squooshy.com * "information is power -- share the wealth."