[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Script shell suspends after executing second child process
From: |
konsolebox |
Subject: |
Re: Script shell suspends after executing second child process |
Date: |
Sun, 15 Nov 2015 01:39:04 +0800 |
On Fri, Nov 13, 2015 at 4:15 AM, Chet Ramey <chet.ramey@case.edu> wrote:
> On 11/12/15 5:27 AM, konsolebox wrote:
>> My interactive (using `read`) Bash-script application still suspends
>> itself after
>> executing second instance of a player. I've only seen this happen in
>> the newest development version of Bash.
>
> According to the change log, the last time I made a change that might
> be relevant to this problem was April 23. You might try getting the
> version immediately preceding that one and seeing whether or not that
> version has the problem.
>
This seems to be the modification that causes the problem. It's in
"commit bash-20150424 snapshot".
--- a/jobs.c
+++ b/jobs.c
@@ -2658,8 +2658,8 @@ itrace("wait_for: blocking wait for %d returns
%d child = %p", (int)pid, r, chil
if (job == NO_JOB)
itrace("wait_for: job == NO_JOB, giving the terminal to shell_pgrp
(%ld)", (long)shell_pgrp);
#endif
- /* Don't modify terminal pgrp if we are running in the background */
- if (running_in_background == 0)
+ /* Don't modify terminal pgrp if we are running in background
or a subshell */
+ if (running_in_background == 0 && subshell_environment == 0)
give_terminal_to (shell_pgrp, 0);
}
It seems to me that the new code prevents the subshell from having a
different terminal control from its parent shell. In other words, no
isolation happens. I'm not sure about the rationale but, should we at
least not do it in subshells induced by process substitution and
command substitution? Just my quick thoughts. I'll still look more
into it.