From bdc406d15d5efa45970ebaf404f0d2a411abff91 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Sun, 15 Jul 2007 01:13:25 +0000 Subject: ash: make "jobs | cat" work like in bash (was giving empty output) --- shell/ash.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'shell') 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) { -- cgit v1.2.3