sh: jobs -p: Do not ask the kernel for the pgid.
The getpgid() call will fail if the first process in the job has already terminated, resulting in output of "-1". The pgid of a job is always the pid of the first process in the job and other code already relies on this.
This commit is contained in:
parent
fb1c48789e
commit
81a44f4bf1
@ -308,7 +308,6 @@ showjob(struct job *jp, pid_t pid, int mode)
|
||||
struct procstat *ps;
|
||||
struct job *j;
|
||||
int col, curr, i, jobno, prev, procno;
|
||||
pid_t ppid;
|
||||
char c;
|
||||
|
||||
procno = (mode == SHOWJOBS_PGIDS) ? 1 : jp->nprocs;
|
||||
@ -323,9 +322,7 @@ showjob(struct job *jp, pid_t pid, int mode)
|
||||
#endif
|
||||
for (ps = jp->ps ; ; ps++) { /* for each process */
|
||||
if (mode == SHOWJOBS_PIDS || mode == SHOWJOBS_PGIDS) {
|
||||
ppid = (mode == SHOWJOBS_PIDS) ? ps->pid :
|
||||
getpgid(ps->pid);
|
||||
out1fmt("%d\n", (int)ppid);
|
||||
out1fmt("%d\n", (int)ps->pid);
|
||||
goto skip;
|
||||
}
|
||||
if (mode != SHOWJOBS_VERBOSE && ps != jp->ps && pid == 0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user