bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Fix foreground dead jobs in trap handlers reported like back


From: Koichi Murase
Subject: Re: [PATCH] Fix foreground dead jobs in trap handlers reported like background ones in `jobs'
Date: Mon, 3 Oct 2022 12:04:09 +0900

2022年10月1日(土) 4:30 Chet Ramey <chet.ramey@case.edu>:
> On 7/17/22 11:52 PM, Koichi Murase wrote:
> Thanks for the detailed report and suggested patches. I applied a variant
> of your patch 3;

Thank you for taking the time to review and apply the patch.

> the change to print_job appears not to be needed (at least
> all of your test cases work without it).

Maybe it has been fixed in another way, but how about the following
test cases?  Let us consider the following two functions:

  $ f1() { echo begin;for a in {0..3}; do (kill -9 $BASHPID); done;echo end; }
  $ f2() { echo begin;for a in {0..3}; do (kill -9 $BASHPID);
done;jobs;echo end; }

The difference between the two functions is that `f2` calls `jobs'.
I expect the same behavior of `f1' and `f2' as far as there are no
background jobs.  Also, I expect the same messages of `f1' in the
normal context and in the trap handler except that the messages are
delayed until the end of the trap handler in the latter case.

With the original patch 3, I obtain the result I expect as:

  $ ./bash-r0022-fix3 --norc
  $ f1() { echo begin;for a in {0..3}; do (kill -9 $BASHPID); done;echo end; }
  $ f2() { echo begin;for a in {0..3}; do (kill -9 $BASHPID);
done;jobs;echo end; }
  $ f1
  begin
  Killed
  Killed
  Killed
  Killed
  end
  $ trap f1 INT
  $ ^C
  begin
  end

  Killed
  Killed
  Killed
  Killed
  $ f2
  begin
  Killed
  Killed
  Killed
  Killed
  end
  $ trap f2 INT
  $ ^C
  begin
  end

  Killed
  Killed
  Killed
  Killed

If I drop the change to `print_job' from patch 3, the behavior changes
only for `f2' in the trap handler. I get the killed job information in
an unexpected format.

  $ ./bash-r0022-fix3-no_print_job_fix --norc
  $ f1() { echo begin;for a in {0..3}; do (kill -9 $BASHPID); done;echo end; }
  $ f2() { echo begin;for a in {0..3}; do (kill -9 $BASHPID);
done;jobs;echo end; }
 $ f1
  begin
  Killed
  Killed
  Killed
  Killed
  end
  $ trap f1 INT
  $ ^C
  begin
  end

  Killed
  Killed
  Killed
  Killed
  $ f2
  begin
  Killed
  Killed
  Killed
  Killed
  end
  $ trap f2 INT
  $ ^C
  begin
  [1]   Killed                  ( kill -9 $BASHPID )
  [2]   Killed                  ( kill -9 $BASHPID )
  [3]   Killed                  ( kill -9 $BASHPID )
  [4]   Killed                  ( kill -9 $BASHPID )
  end

I feel the former behavior is more consistent.  I would like to hear
what you think. Thank you.

--
Koichi



reply via email to

[Prev in Thread] Current Thread [Next in Thread]