diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-07-15 05:13:25 +0400 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-07-15 05:13:25 +0400 |
commit | bdc406d15d5efa45970ebaf404f0d2a411abff91 (patch) | |
tree | 09b12bfa7057850b8e49dde7a87d804d74484e41 | |
parent | 39125bec38ac3a13ae550ee7ba3e924a42a73e18 (diff) |
ash: make "jobs | cat" work like in bash (was giving empty output)
-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) { |