Lines Matching defs:jp
255 struct job *jp;
261 jp = getjob(arg_ptr, 0);
262 if (jp->jobctl == 0)
264 out1fmt("%s", jp->ps[0].cmd);
265 for (i = 1; i < jp->nprocs; i++)
266 out1fmt(" | %s", jp->ps[i].cmd );
270 if (tcsetpgrp(ttyfd, jp->pgrp) == -1) {
275 restartjob(jp);
276 status = waitforjob(jp);
296 set_curjob(struct job *jp, int mode)
301 ji = jp - jobtab;
305 curjob = jp->prev_job;
310 jobtab[i].prev_job = jp->prev_job;
318 jp->prev_job = -1;
330 jp->prev_job = jp1->prev_job;
336 jp->prev_job = curjob;
345 struct job *jp;
352 jp = getjob(*argptr, 0);
353 if (jp->jobctl == 0)
355 set_curjob(jp, 1);
356 out1fmt("[%d] %s", JNUM(jp), jp->ps[0].cmd);
357 for (i = 1; i < jp->nprocs; i++)
358 out1fmt(" | %s", jp->ps[i].cmd );
361 restartjob(jp);
368 restartjob(struct job *jp)
373 if (jp->state == JOBDONE)
375 if (jp->pgrp == 0)
376 error("Job [%d] does not have a process group", JNUM(jp));
379 for (e = i = 0; i < jp->nprocs; i++) {
385 if (jp->ps[i].status != -1 && !WIFSTOPPED(jp->ps[i].status))
392 if (killpg(jp->pgrp, SIGCONT) != -1)
400 else if (i >= jp->nprocs)
401 error("Job [%d] has no stopped processes", JNUM(jp));
407 for (ps = jp->ps, i = jp->nprocs ; --i >= 0 ; ps++) {
412 JNUM(jp), ps->pid, ps->status));
414 jp->state = JOBRUNNING;
431 showjob(struct output *out, struct job *jp, int mode)
443 jp->pgrp != 0 ? (long)jp->pgrp : (long)jp->ps->pid);
448 procno = jp->nprocs;
458 ps = jp->ps;
472 procno = jp->nprocs;
476 if (jp->state == JOBDONE && !(mode & SHOW_NO_FREE)) {
478 JNUM(jp)));
479 freejob(jp);
484 for (ps = jp->ps; --procno >= 0; ps++) { /* for each process */
485 if (ps == jp->ps)
487 JNUM(jp),
489 jp - jobtab == curjob ?
492 jp - jobtab == jobtab[curjob].prev_job ?
543 jp->flags &= ~JOBCHANGED;
544 if (jp->state == JOBDONE && !(mode & SHOW_NO_FREE))
545 freejob(jp);
601 struct job *jp;
624 for (jobno = 1, jp = jobtab ; jobno <= njobs ; jobno++, jp++) {
625 if (!jp->used)
627 if (jp->nprocs == 0) {
629 freejob(jp);
632 if ((mode & SHOW_CHANGED) && !(jp->flags & JOBCHANGED))
634 if (silent && (jp->flags & JOBCHANGED)) {
635 jp->flags &= ~JOBCHANGED;
638 showjob(out, jp, mode);
647 freejob(struct job *jp)
650 if (jp->ps != &jp->ps0) {
651 ckfree(jp->ps);
652 jp->ps = &jp->ps0;
654 jp->nprocs = 0;
655 jp->used = 0;
657 set_curjob(jp, 0);
666 jobstatus(const struct job *jp, int raw)
671 if ((jp->flags & JPIPEFAIL) && jp->nprocs) {
674 for (i = 0; i < jp->nprocs; i++)
675 if (jp->ps[i].status != 0)
676 status = jp->ps[i].status;
678 status = jp->ps[jp->nprocs ? jp->nprocs - 1 : 0].status;
704 struct job *jp;
754 for (jp = jobtab, i = njobs ; --i >= 0 ; jp++) {
756 jp->flags |= JOBWANTED;
758 jp->flags &= ~JOBWANTED;
759 jp->ref = NULL;
777 last = jp = getjob(*arg, 1);
778 if (!jp)
780 if (jp->ref == NULL)
781 jp->ref = *arg;
782 if (any && jp->state == JOBDONE) {
787 retval = jobstatus(jp, 0);
791 freejob(jp);
795 if (!(jp->flags & JOBWANTED)) {
803 jp->flags |= JOBWANTED;
806 job = jp;
836 for (jp = jobtab, i = njobs; --i >= 0; jp++) {
837 if (jp->used && jp->flags & JOBWANTED &&
838 jp->state == JOBDONE) {
839 job = jp;
842 if (jp->used && jp->state == JOBRUNNING)
843 job = jp;
852 jp = job;
854 jp->state));
860 if (jp->state == JOBRUNNING) {
881 job = jp; /* we want this, and it is done */
942 struct job *jp;
962 jp = getjob(*argptr, 0);
964 out1fmt("%%%d\n", JNUM(jp));
968 if (jp->pgrp != 0) {
969 out1fmt("%ld\n", (long)jp->pgrp);
975 i = jp->nprocs - 1;
978 out1fmt("%ld\n", (long)jp->ps[i].pid);
981 for (i = 0 ; i < jp->nprocs ; ) {
982 out1fmt("%ld", (long)jp->ps[i].pid);
983 out1c(++i < jp->nprocs ? ' ' : '\n');
1102 struct job *jp;
1106 jp = getjob(name, 1);
1107 if (jp == 0)
1109 return -jp->pgrp;
1120 struct job *jp;
1156 for (jp = jobtab, i = njobs ; --i >= 0 ; jp++) {
1157 if (!jp->used || jp->nprocs <= 0)
1160 && strstr(jp->ps[0].cmd, name + 2))
1161 || prefix(name + 1, jp->ps[0].cmd)) {
1167 found = jp;
1176 for (jp = jobtab, i = njobs ; --i >= 0 ; jp++) {
1177 if (jp->used && jp->nprocs > 0
1178 && jp->ps[jp->nprocs - 1].pid == pid)
1179 return jp;
1184 jp = jobtab + jobno;
1185 if (jp->used)
1186 return jp;
1207 struct job *jp;
1213 for (i = njobs, jp = jobtab ; --i >= 0 ; jp++) {
1214 if (jp->used)
1227 jobstarted(struct job *jp)
1232 outfmt(out2, "[%d] %ld\n", JNUM(jp),
1233 jp->pgrp != 0 ? (long)jp->pgrp : (long)jp->ps->pid);
1244 struct job *jp;
1249 for (i = njobs, jp = jobtab ; --i >= 0 ; jp++) {
1250 if (jp->used)
1251 freejob(jp);
1256 for (i = njobs, jp = jobtab ; ; jp++) {
1262 jp = ckmalloc((njobs + 4) * sizeof jobtab[0]);
1263 memcpy(jp, jobtab, njobs * sizeof jp[0]);
1266 if (jp[i].ps == &jobtab[i].ps0)
1267 jp[i].ps = &jp[i].ps0;
1269 jobtab = jp;
1271 jp = jobtab + njobs;
1279 if (jp->used == 0)
1283 jp->state = JOBRUNNING;
1284 jp->used = 1;
1285 jp->flags = pipefail ? JPIPEFAIL : 0;
1286 jp->nprocs = 0;
1287 jp->pgrp = 0;
1289 jp->jobctl = jobctl;
1290 set_curjob(jp, 1);
1293 jp->ps = ckmalloc(nprocs * sizeof (struct procstat));
1295 jp->ps = &jp->ps0;
1299 nprocs, (jp->flags & JPIPEFAIL) ? " PF" : "", JNUM(jp)));
1300 return jp;
1306 * own process group. Jp is a job structure that the job is to be added to.
1307 * N is the command that will be evaluated by the child. Both jp and n may
1320 forkshell(struct job *jp, union node *n, int mode)
1326 JNUM(jp), n, mode));
1336 forkchild(jp, n, mode, 0);
1339 return forkparent(jp, n, mode, pid);
1344 forkparent(struct job *jp, union node *n, int mode, pid_t pid)
1355 if (jp == NULL || jp->nprocs == 0)
1358 pgrp = jp->pgrp;
1364 if (jp) {
1365 struct procstat *ps = &jp->ps[jp->nprocs++];
1369 jp->pgrp = pgrp; /* 0 if !mflag */
1378 forkchild(struct job *jp, union node *n, int mode, int vforked)
1400 if (jp == NULL || jp->nprocs == 0)
1403 pgrp = jp->ps[0].pid;
1416 if ((jp == NULL || jp->nprocs == 0) &&
1427 if ((jp == NULL || jp->nprocs == 0) &&
1465 waitforjob(struct job *jp)
1474 jp)));
1475 while (jp->state == JOBRUNNING) {
1476 dowait(WBLOCK, jp, NULL);
1479 if (jp->jobctl) {
1484 if (jp->state == JOBSTOPPED && curjob != jp - jobtab)
1485 set_curjob(jp, 2);
1487 status = jobstatus(jp, 1);
1500 JNUM(jp), jp->nprocs, status, st));
1502 if (jp->jobctl) {
1515 if (! JOBS || jp->state == JOBDONE)
1516 freejob(jp);
1543 struct job *jp;
1581 for (jp = jobtab ; jp < jobtab + njobs ; jp++) {
1582 if (jp->used) {
1592 for (sp = jp->ps ; sp < jp->ps + jp->nprocs ; sp++) {
1607 JNUM(jp), pid, sp->status));
1620 jp->flags |= JOBCHANGED;
1622 jp->state = JOBRUNNING;
1635 thisjob = jp;
1637 *changed = jp;
1667 if (jp->state != state) {
1670 JNUM(jp), jp->state, state));
1671 jp->state = state;
1674 set_curjob(jp, 0);
1762 waitproc(int block, struct job *jp, int *status)
1768 if (mflag || (jp != NULL && jp->jobctl))
1803 struct job *jp;
1807 for (jobno = 1, jp = jobtab; jobno <= njobs; jobno++, jp++) {
1808 if (jp->used == 0)
1810 if (jp->state == JOBSTOPPED) {