Thread (53 messages) 53 messages, 4 authors, 10d ago

Re: [PATCH v3 04/17] tools/rv: Add selftests

From: Gabriele Monaco <gmonaco@redhat.com>
Date: 2026-07-15 11:25:05
Also in: lkml

On Wed, 2026-07-15 at 02:01 +0800, Wen Yang wrote:
quoted
Any better idea? We cannot really rely on the shell's $! because command
is using a combination of eval+timer and we'd get the wrong pid.
- Since $bgpid is the timeout process, its direct child is exactly the
    command we want. Using pgrep -P $bgpid avoids the fragile pattern
    matching of pgrep -f and won't accidentally match unrelated
    processes with a similar command string, eg:

      for i in $(seq 10); do
          pid=$(pgrep -P "$bgpid" | head -1)
          [ -n "$pid" ] && break
          sleep 0.5
      done
That would be neat, but apparently eval cmd & spawns a new shell (I'd assume to
keep control of the background task), so in practice we get something like:

  bash(88148)───timeout(88150)───rv mon(88151)

while getting the pid of bash in $!, we could probably do:

  pgrep -P "$(pgrep -P "$bgpid")"

but I'm not really sure how portable this is.

Now I tried all sorts of bash hacks but couldn't reliably avoid this subshell
(technically eval "cmd &" with quoted ampersand skips it, but breaks output
redirection or whatever else).

Unless you have a reliable way to get the pid that doesn't rely on some shell-
specific dark magic, I'd keep pgrep -f .
    Note: a bounded retry loop may be necessary; without an upper limit 
the loop hangs indefinitely if the command fails to exec.

- For the verbose test specifically ("my pid is $pid"), the pid already
    appears in rv's own output. An alternative is to match it with a
    numeric pattern instead:

      "my pid is [0-9]\+"

    This sidesteps the race entirely for that test case.
Yeah an accurate pid isn't as important in that test, but since it seems to work
fine I'd keep it.

Thanks,
Gabriele
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help