[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [OSSTEST PATCH] standalone-generate-dump-flight-runvars: Handle ^C properly
On Fri, 2015-10-09 at 18:13 +0100, Ian Jackson wrote: > This is all mad. No kidding! It doesn't appear to be possible to call setsid() from a shell script (other than by re-execing oneself), which is a shame. I wonder at what point we should just rewrite the whole thing in Perl? Anyway right now: > Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> > --- > standalone-generate-dump-flight-runvars | 24 ++++++++++++++++++++++++ > 1 file changed, 24 insertions(+) > > diff --git a/standalone-generate-dump-flight-runvars b/standalone > -generate-dump-flight-runvars > index a1907b0..efedd5c 100755 > --- a/standalone-generate-dump-flight-runvars > +++ b/standalone-generate-dump-flight-runvars > @@ -58,8 +58,32 @@ perbranch () { > flight=check_${branch//[-._]/_} > } > > +# Good grief, handling background proceesses from shell is a pain. "processes" > +# > +# For stupid historical reasons, background processes start with > +# SIGINT (and QUIT) ignored (SuSv3 2.11). bash does not offer a > +# way to ask it not to do this. > +# > +# There is no way to reset this in bash (bash 4.2.37 manpage section > +# on `trap' builtin), so we use perl. However, there is still a race: > +# if the signal arrives just after the fork, after the shell has (in > +# the child) set it to to IGN, but before Perl has put it back, the > +# child might still escape. So in the child we check our parent. > +# > +# I _think_ that that any signal which arrives before the assignment > +# to $SIG{} will definitely have caused our parent to vanish and us to > +# be reparented to pid 1 by the time we do the getppid check. But TBH > +# I can't find any clear support for this requirement. So the result > +# may still be slightly racy in the case that s-g-d-f-r is ^C'd right > +# after starting. Based on your followup I guess you might want to clarify this? > + > for branch in $@; do > perbranch > + perl -e ' > + $SIG{$_}=DFL foreach qw(INT QUIT HUP); > + kill 1, $$ unless getppid=='$$'; > + exec @ARGV or die $!; > + ' \ > ./standalone make-flight -f $flight $branch >$log 2>&1 & > procs+=" $branch=$!" > done _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |