On 18/05/2018 19:39, Herbert Xu wrote:
This patch adds basic vfork support for the case of a simple command.
...
@@ -879,17 +892,30 @@ forkchild(struct job *jp, union node *n, int mode)
}
}
if (!oldlvl && iflag) {
- setsignal(SIGINT);
- setsignal(SIGQUIT);
+ if (mode != FORK_BG) {
+ setsignal(SIGINT);
+ setsignal(SIGQUIT);
+ }
setsignal(SIGTERM);
}
+
+ if (lvforked)
+ return;
+
for (jp = curjob; jp; jp = jp->prev_job)
freejob(jp);
}
This leaves SIGQUIT ignored in background jobs in interactive shells.
ENV= dash -ic 'dash -c "kill -QUIT \$\$; echo huh" & wait'
As of dash 0.5.11, this prints "huh". Before, the subprocess process
killed itself before it could print anything. Other shells do not leave
SIGQUIT ignored.
(In a few other shells, this also prints "huh", but in those other
shells, that is because the inner shell chooses to ignore SIGQUIT, not
because the outer shell leaves it ignored.)
Cheers,
Harald van Dijk