Hello.
Steffen Nurpmeso wrote in <20190806142527.9hs0i%stef...@sdaoden.eu>:
|Robert Elz wrote in <26245.1565045...@jinx.noi.kre.to>:
||Date:Mon, 05 Aug 2019 14:05:43 +0200
||From:Steffen Nurpmeso
||Message-ID: <20190805120543.bf9-u%stef...@sdaoden.eu>
..
||The shell cannot really know - your example was not functional until
||after it set up the traps.
..
||In the parent:
||
|| OK=false
|| T=$(trap -p USR2)# only needed if USR2 might be trapped \
|| already
|| trap 'OK=true' USR2
...
||In the child:
||
|| trap 'whatever' SIG_I_NEED
|| # any other init that is needed
||
|| kill -s USR2 $$ # or if the parent pid is not $$, use whatever is.
...
||No temp files, named pipes, or othe similar stateful mechanisms needed.
Sorry for all that noise once again, but i have then rewritten it
using mkfifo etc. with credits for some of you (which collects
things i have seen flying by since Saturday night):
They also came up with the solution: do not wait(1) on child
processes until we know about their state, so that anytime before we
actually do wait(1) we can safely kill(1) them (Jilles Tjoelker).
Thus, let's create a FIFO (Chet Ramey) to get a synchronized
device, strip the wild test undertaker to a core that only writes
"timeout" to that FIFO, and also improve its startup-is-completed to
simply send a signal to the parent process (Robert Elz). So
either the tests finish nicely, in which case they write their job
number to the fifo, or we see "timeout" and kill all remains.
There is still a minimal race which would falsely report tests as
failures, but should do no other harm.
Thanks.
--steffen
|
|Der Kragenbaer,The moon bear,
|der holt sich munter he cheerfully and one by one
|einen nach dem anderen runter wa.ks himself off
|(By Robert Gernhardt)