Lines Matching refs:jp

187 	struct job *jp;
192 jp = getjob(*argptr);
193 if (jp->jobctl == 0)
195 printjobcmd(jp);
197 pgrp = jp->ps[0].pid;
199 restartjob(jp);
200 jp->foreground = 1;
202 status = waitforjob(jp, (int *)NULL);
211 struct job *jp;
215 jp = getjob(*argptr);
216 if (jp->jobctl == 0)
218 if (jp->state == JOBDONE)
220 restartjob(jp);
221 jp->foreground = 0;
222 out1fmt("[%td] ", jp - jobtab + 1);
223 printjobcmd(jp);
230 restartjob(struct job *jp)
235 if (jp->state == JOBDONE)
237 setcurjob(jp);
239 kill(-jp->ps[0].pid, SIGCONT);
240 for (ps = jp->ps, i = jp->nprocs ; --i >= 0 ; ps++) {
243 jp->state = 0;
282 printjobcmd(struct job *jp)
287 for (ps = jp->ps, i = jp->nprocs ; --i >= 0 ; ps++) {
296 showjob(struct job *jp, int mode)
306 procno = (mode == SHOWJOBS_PGIDS) ? 1 : jp->nprocs;
307 jobno = jp - jobtab + 1;
316 ps = jp->ps + jp->nprocs - 1;
317 if (jp->state == 0) {
320 } else if (jp->state == JOBSTOPPED) {
321 while (!WIFSTOPPED(ps->status) && ps > jp->ps)
350 for (ps = jp->ps ; procno > 0 ; ps++, procno--) { /* for each process */
355 if (mode != SHOWJOBS_VERBOSE && ps != jp->ps)
357 if (jobno == curr && ps == jp->ps)
359 else if (jobno == prev && ps == jp->ps)
363 if (ps == jp->ps)
374 if (ps == jp->ps) {
386 printjobcmd(jp);
403 struct job *jp;
407 for (jobno = 1, jp = jobtab ; jobno <= njobs ; jobno++, jp++) {
408 if (! jp->used)
410 if (jp->nprocs == 0) {
411 freejob(jp);
414 if (change && ! jp->changed)
416 showjob(jp, mode);
418 jp->changed = 0;
422 if (jp->state == JOBDONE && !jp->remembered &&
423 (iflag || jp != bgjob)) {
424 freejob(jp);
436 freejob(struct job *jp)
442 if (bgjob == jp)
444 for (i = jp->nprocs, ps = jp->ps ; --i >= 0 ; ps++) {
448 if (jp->ps != &jp->ps0)
449 ckfree(jp->ps);
450 jp->used = 0;
452 deljob(jp);
485 struct job *jp;
510 for (jp = jobtab ; jp < jobtab + njobs; jp++)
511 if (jp->used && jp->state == JOBDONE) {
512 if (! iflag || ! jp->changed)
513 freejob(jp);
515 jp->remembered = 0;
516 if (jp == bgjob)
520 for (jp = jobtab ; ; jp++) {
521 if (jp >= jobtab + njobs) { /* no running procs */
524 if (jp->used && jp->state == 0)
540 struct job *jp;
544 jp = getjob(*argptr);
545 for (i = 0 ; i < jp->nprocs ; ) {
546 out1fmt("%d", (int)jp->ps[i].pid);
547 out1c(++i < jp->nprocs? ' ' : '\n');
562 struct job *found, *jp;
568 currentjob: if ((jp = getcurjob(NULL)) == NULL)
570 return (jp);
586 if ((jp = getcurjob(NULL)) == NULL ||
587 (jp = getcurjob(jp)) == NULL)
589 return (jp);
593 for (jp = jobtab, i = njobs ; --i >= 0 ; jp++) {
594 if (jp->used && jp->nprocs > 0
595 && strstr(jp->ps[0].cmd, name + 2) != NULL) {
598 found = jp;
605 for (jp = jobtab, i = njobs ; --i >= 0 ; jp++) {
606 if (jp->used && jp->nprocs > 0
607 && prefix(name + 1, jp->ps[0].cmd)) {
610 found = jp;
618 for (jp = jobtab, i = njobs ; --i >= 0 ; jp++) {
619 if (jp->used && jp->nprocs > 0
620 && jp->ps[jp->nprocs - 1].pid == pid)
621 return jp;
631 struct job *jp;
633 jp = getjob_nonotfound(name);
634 if (jp == NULL)
636 return (jp);
643 struct job *jp;
645 jp = getjob(name);
646 return -jp->ps[0].pid;
657 struct job *jp;
659 for (i = njobs, jp = jobtab ; ; jp++) {
668 jp = ckmalloc((njobs + 4) * sizeof jobtab[0]);
669 memcpy(jp, jobtab, njobs * sizeof jp[0]);
673 jobmru = &jp[jobmru - jobtab];
675 if (jp[i].next != NULL)
676 jp[i].next = &jp[jp[i].next -
680 bgjob = &jp[bgjob - jobtab];
683 if (jp[i].ps == &jobtab[i].ps0)
684 jp[i].ps = &jp[i].ps0;
686 jobtab = jp;
688 jp = jobtab + njobs;
694 if (jp->used == 0)
698 jp->state = 0;
699 jp->used = 1;
700 jp->changed = 0;
701 jp->nprocs = 0;
702 jp->foreground = 0;
703 jp->remembered = 0;
705 jp->jobctl = jobctl;
706 jp->next = NULL;
709 jp->ps = ckmalloc(nprocs * sizeof (struct procstat));
711 jp->ps = &jp->ps0;
715 jp - jobtab + 1));
716 return jp;
723 struct job *jp, *prev;
725 for (prev = NULL, jp = jobmru; jp != NULL; prev = jp, jp = jp->next) {
726 if (jp == cj) {
728 prev->next = jp->next;
730 jobmru = jp->next;
731 jp->next = jobmru;
743 struct job *jp, *prev;
745 for (prev = NULL, jp = jobmru; jp != NULL; prev = jp, jp = jp->next) {
746 if (jp == j) {
748 prev->next = jp->next;
750 jobmru = jp->next;
763 struct job *jp;
766 for (jp = jobmru; jp != NULL; jp = jp->next)
767 if (jp->used && jp != nj && jp->state == JOBSTOPPED)
768 return (jp);
770 for (jp = jobmru; jp != NULL; jp = jp->next)
771 if (jp->used && jp != nj)
772 return (jp);
782 * N is the command that will be evaluated by the child. Both jp and n may
795 forkshell(struct job *jp, union node *n, int mode)
800 TRACE(("forkshell(%%%td, %p, %d) called\n", jp - jobtab, (void *)n,
803 if (mode == FORK_BG && (jp == NULL || jp->nprocs == 0))
828 if (jp == NULL || jp->nprocs == 0)
831 pgrp = jp->ps[0].pid;
842 if ((jp == NULL || jp->nprocs == 0) &&
854 if ((jp == NULL || jp->nprocs == 0) &&
876 if (jp == NULL || jp->nprocs == 0)
879 pgrp = jp->ps[0].pid;
887 bgjob = jp;
889 if (jp) {
890 struct procstat *ps = &jp->ps[jp->nprocs++];
896 jp->foreground = mode == FORK_FG;
898 setcurjob(jp);
908 vforkexecshell(struct job *jp, char **argv, char **envp, const char *path, int idx, int pip[2])
914 TRACE(("vforkexecshell(%%%td, %s, %p) called\n", jp - jobtab, argv[0],
940 if (jp) {
941 struct procstat *ps = &jp->ps[jp->nprocs++];
945 jp->foreground = 1;
947 setcurjob(jp);
976 waitforjob(struct job *jp, int *origstatus)
979 int propagate_int = jp->jobctl && jp->foreground;
985 TRACE(("waitforjob(%%%td) called\n", jp - jobtab + 1));
986 while (jp->state == 0)
988 DOWAIT_SIG_ANY : 0), jp) == -1)
991 if (jp->jobctl) {
995 if (jp->state == JOBSTOPPED)
996 setcurjob(jp);
998 status = jp->ps[jp->nprocs - 1].status;
1010 if (! JOBS || jp->state == JOBDONE)
1011 freejob(jp);
1043 struct job *jp;
1102 for (jp = jobtab ; jp < jobtab + njobs ; jp++) {
1103 if (jp->used && jp->nprocs > 0) {
1106 for (sp = jp->ps ; sp < jp->ps + jp->nprocs ; sp++) {
1115 jp->state = 0;
1118 thisjob = jp;
1127 if (jp->state != state) {
1128 TRACE(("Job %td: changing state from %d to %d\n", jp - jobtab + 1, jp->state, state));
1129 jp->state = state;
1130 if (jp != job) {
1131 if (done && !jp->remembered &&
1132 !iflag && jp != bgjob)
1133 freejob(jp);
1136 deljob(jp);
1183 struct job *jp;
1187 for (jobno = 1, jp = jobtab; jobno <= njobs; jobno++, jp++) {
1188 if (jp->used == 0)
1190 if (jp->state == JOBSTOPPED) {