[RndTbl] Shell exec(2) help?

Robert Keizer robert at keizer.ca
Tue Jun 30 10:20:01 CDT 2020


I can't comment on the exec sh bit, but I would solve the infinite
recursion with an infinite while instead of attempting to execute.

You'd end up with a long running process instead of a new one every
time period, but the effect other than that would be the same I think.


while [ 1 -gt 0 ]; do
  // whatever you need done.
done;

On Tue, Jun 30, 2020 at 10:17 AM Adam Thompson <athompso at athompso.net> wrote:
>
> I've written a shell script that redownloads itself and re-executes
> itself, but I'm not quite seeing the behaviour I'd expect out of "exec
> sh".  Instead of one process, I get an infinite progression of shells
> that finally blows up when I hit ulimits.
>
> The script:
>
> ===BOF===
> curl -s $URL/targets \
> | while read TGTNAME TGTIP ; do
>      (
>          echo -n "."
>
>          mtr \
>              --interval 0.1 \
>              --gracetime 1 \
>              --timeout 1 \
>              --report-wide \
>              --report-cycles 600 \
>              --show-ips \
>              --aslookup \
>              --no-dns \
>              ${TGTIP} \
>          | awk -f parse.awk -v TGT=${TGTNAME}  \
>          | psql -q -b -h $PGHOST -U $PGUSER $PGDB
>      ) &
>     wait &
> done
>
> # start all over again
> sleep 60 &
> wait
> curl -s $URL/go.sh | exec sh
> ===EOF===
>
> The key items are the backgrounding of mtr/awk/psql, which appears to
> work properly - there's 12 lines in "targets" and I only see 12
> mtr/awk/psql process groups at a time - the sleeping + waiting (which
> theoretically reaps all children and grandchildren, I think) and the
> final "exec".
>
> Except instead of exec'ing, I run an infinite sequence of shells, each
> one a child of the previous.  E.g. from pstree(1):
>
> # pstree -lp 1628
> screen(1628)─┬─bash(1629)───sh(12707)───sh(12854)───sh(12986)───sh(13154)───sh(13309)───sh(13444)───sh(13579)───sh(13709)───sh(13842)───sh(13979)───sh(14101)───sh(14242)───sh(14396)───sh(14530)───sh(14655)───sh(14795)───sh(14935)───sh(15076)───sh(15203)───sh(15353)───sh(15490)───sh(15624)───sh(15753)───sh(15891)───sh(16023)───sh(16154)───sh(16282)───sh(16418)───sh(16551)───sh(16696)───sh(16842)───sh(16975)───sh(17112)───sh(17241)───sh(17388)───sh(17522)───sh(17664)───sh(17824)───sh(17956)───sh(18096)───sh(18233)───sleep(18279)
>
> I think the problem has something to do with the fact the final exec is
> on the RHS of a pipe, and thus is executing inside a subshell, but how
> do I fix this?
>
> Thanks,
> -Adam
> _______________________________________________
> Roundtable mailing list
> Roundtable at muug.ca
> https://muug.ca/mailman/listinfo/roundtable



More information about the Roundtable mailing list