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 ; ; ps++) { /* 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);
405 struct job *jp;
409 for (jobno = 1, jp = jobtab ; jobno <= njobs ; jobno++, jp++) {
410 if (! jp->used)
412 if (jp->nprocs == 0) {
413 freejob(jp);
416 if (change && ! jp->changed)
418 showjob(jp, mode);
420 jp->changed = 0;
424 if (jp->state == JOBDONE && !jp->remembered &&
425 (iflag || jp != bgjob)) {
426 freejob(jp);
438 freejob(struct job *jp)
444 if (bgjob == jp)
446 for (i = jp->nprocs, ps = jp->ps ; --i >= 0 ; ps++) {
450 if (jp->ps != &jp->ps0)
451 ckfree(jp->ps);
452 jp->used = 0;
454 deljob(jp);
487 struct job *jp;
512 for (jp = jobtab ; jp < jobtab + njobs; jp++)
513 if (jp->used && jp->state == JOBDONE) {
514 if (! iflag || ! jp->changed)
515 freejob(jp);
517 jp->remembered = 0;
518 if (jp == bgjob)
522 for (jp = jobtab ; ; jp++) {
523 if (jp >= jobtab + njobs) { /* no running procs */
526 if (jp->used && jp->state == 0)
542 struct job *jp;
546 jp = getjob(*argptr);
547 for (i = 0 ; i < jp->nprocs ; ) {
548 out1fmt("%d", (int)jp->ps[i].pid);
549 out1c(++i < jp->nprocs? ' ' : '\n');
564 struct job *found, *jp;
570 currentjob: if ((jp = getcurjob(NULL)) == NULL)
572 return (jp);
588 if ((jp = getcurjob(NULL)) == NULL ||
589 (jp = getcurjob(jp)) == NULL)
591 return (jp);
595 for (jp = jobtab, i = njobs ; --i >= 0 ; jp++) {
596 if (jp->used && jp->nprocs > 0
597 && strstr(jp->ps[0].cmd, name + 2) != NULL) {
600 found = jp;
607 for (jp = jobtab, i = njobs ; --i >= 0 ; jp++) {
608 if (jp->used && jp->nprocs > 0
609 && prefix(name + 1, jp->ps[0].cmd)) {
612 found = jp;
620 for (jp = jobtab, i = njobs ; --i >= 0 ; jp++) {
621 if (jp->used && jp->nprocs > 0
622 && jp->ps[jp->nprocs - 1].pid == pid)
623 return jp;
633 struct job *jp;
635 jp = getjob_nonotfound(name);
636 if (jp == NULL)
638 return (jp);
645 struct job *jp;
647 jp = getjob(name);
648 return -jp->ps[0].pid;
659 struct job *jp;
661 for (i = njobs, jp = jobtab ; ; jp++) {
670 jp = ckmalloc((njobs + 4) * sizeof jobtab[0]);
671 memcpy(jp, jobtab, njobs * sizeof jp[0]);
675 jobmru = &jp[jobmru - jobtab];
677 if (jp[i].next != NULL)
678 jp[i].next = &jp[jp[i].next -
682 bgjob = &jp[bgjob - jobtab];
685 if (jp[i].ps == &jobtab[i].ps0)
686 jp[i].ps = &jp[i].ps0;
688 jobtab = jp;
690 jp = jobtab + njobs;
696 if (jp->used == 0)
700 jp->state = 0;
701 jp->used = 1;
702 jp->changed = 0;
703 jp->nprocs = 0;
704 jp->foreground = 0;
705 jp->remembered = 0;
707 jp->jobctl = jobctl;
708 jp->next = NULL;
711 jp->ps = ckmalloc(nprocs * sizeof (struct procstat));
713 jp->ps = &jp->ps0;
717 jp - jobtab + 1));
718 return jp;
725 struct job *jp, *prev;
727 for (prev = NULL, jp = jobmru; jp != NULL; prev = jp, jp = jp->next) {
728 if (jp == cj) {
730 prev->next = jp->next;
732 jobmru = jp->next;
733 jp->next = jobmru;
745 struct job *jp, *prev;
747 for (prev = NULL, jp = jobmru; jp != NULL; prev = jp, jp = jp->next) {
748 if (jp == j) {
750 prev->next = jp->next;
752 jobmru = jp->next;
765 struct job *jp;
768 for (jp = jobmru; jp != NULL; jp = jp->next)
769 if (jp->used && jp != nj && jp->state == JOBSTOPPED)
770 return (jp);
772 for (jp = jobmru; jp != NULL; jp = jp->next)
773 if (jp->used && jp != nj)
774 return (jp);
784 * N is the command that will be evaluated by the child. Both jp and n may
797 forkshell(struct job *jp, union node *n, int mode)
802 TRACE(("forkshell(%%%td, %p, %d) called\n", jp - jobtab, (void *)n,
805 if (mode == FORK_BG && (jp == NULL || jp->nprocs == 0))
830 if (jp == NULL || jp->nprocs == 0)
833 pgrp = jp->ps[0].pid;
844 if ((jp == NULL || jp->nprocs == 0) &&
856 if ((jp == NULL || jp->nprocs == 0) &&
878 if (jp == NULL || jp->nprocs == 0)
881 pgrp = jp->ps[0].pid;
889 bgjob = jp;
891 if (jp) {
892 struct procstat *ps = &jp->ps[jp->nprocs++];
898 jp->foreground = mode == FORK_FG;
900 setcurjob(jp);
910 vforkexecshell(struct job *jp, char **argv, char **envp, const char *path, int idx, int pip[2])
916 TRACE(("vforkexecshell(%%%td, %s, %p) called\n", jp - jobtab, argv[0],
942 if (jp) {
943 struct procstat *ps = &jp->ps[jp->nprocs++];
947 jp->foreground = 1;
949 setcurjob(jp);
978 waitforjob(struct job *jp, int *origstatus)
981 int propagate_int = jp->jobctl && jp->foreground;
987 TRACE(("waitforjob(%%%td) called\n", jp - jobtab + 1));
988 while (jp->state == 0)
990 DOWAIT_SIG_ANY : 0), jp) == -1)
993 if (jp->jobctl) {
997 if (jp->state == JOBSTOPPED)
998 setcurjob(jp);
1000 status = jp->ps[jp->nprocs - 1].status;
1012 if (! JOBS || jp->state == JOBDONE)
1013 freejob(jp);
1045 struct job *jp;
1104 for (jp = jobtab ; jp < jobtab + njobs ; jp++) {
1105 if (jp->used && jp->nprocs > 0) {
1108 for (sp = jp->ps ; sp < jp->ps + jp->nprocs ; sp++) {
1117 jp->state = 0;
1120 thisjob = jp;
1129 if (jp->state != state) {
1130 TRACE(("Job %td: changing state from %d to %d\n", jp - jobtab + 1, jp->state, state));
1131 jp->state = state;
1132 if (jp != job) {
1133 if (done && !jp->remembered &&
1134 !iflag && jp != bgjob)
1135 freejob(jp);
1138 deljob(jp);
1185 struct job *jp;
1189 for (jobno = 1, jp = jobtab; jobno <= njobs; jobno++, jp++) {
1190 if (jp->used == 0)
1192 if (jp->state == JOBSTOPPED) {