diff options
-rw-r--r-- | shell/ash.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/shell/ash.c b/shell/ash.c index 6173a2505..06c4698f9 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -4374,8 +4374,10 @@ clear_traps(void) } } } -/* lives far away from here, needed for forkchild */ + +/* Lives far away from here, needed for forkchild */ static void closescript(void); +/* Called after fork(), in child */ static void forkchild(struct job *jp, union node *n, int mode) { @@ -4419,11 +4421,18 @@ forkchild(struct job *jp, union node *n, int mode) setsignal(SIGQUIT); setsignal(SIGTERM); } +#if JOBS + /* For "jobs | cat" to work like in bash, we must retain list of jobs + * in child, but we do need to remove ourself */ + freejob(jp); +#else for (jp = curjob; jp; jp = jp->prev_job) freejob(jp); +#endif jobless = 0; } +/* Called after fork(), in parent */ static void forkparent(struct job *jp, union node *n, int mode, pid_t pid) { |