Lines Matching refs:j
288 Job *j; in j_exit() local
291 for (j = job_list; j != NULL; j = j->next) { in j_exit()
292 if (j->ppid == procpid && in j_exit()
293 (j->state == PSTOPPED || in j_exit()
294 (j->state == PRUNNING && in j_exit()
295 ((j->flags & JF_FG) || in j_exit()
298 if (j->pgrp == 0) in j_exit()
299 kill_job(j, SIGHUP); in j_exit()
301 mksh_killpg(j->pgrp, SIGHUP); in j_exit()
303 if (j->state == PSTOPPED) { in j_exit()
304 if (j->pgrp == 0) in j_exit()
305 kill_job(j, SIGCONT); in j_exit()
307 mksh_killpg(j->pgrp, SIGCONT); in j_exit()
451 Job *j; local
483 j = last_job;
489 j = new_job();
494 j->flags = (flags & XXCOM) ? JF_XXCOM :
496 timerclear(&j->usrtime);
497 timerclear(&j->systime);
498 j->state = PRUNNING;
499 j->pgrp = 0;
500 j->ppid = procpid;
501 j->age = ++njobs;
502 j->proc_list = p;
503 j->coproc_id = 0;
504 last_job = j;
506 put_job(j, PJ_PAST_STOPPED);
524 kill_job(j, SIGKILL);
525 remove_job(j, "fork failed");
538 if (j->pgrp == 0) {
540 j->pgrp = p->pid;
548 setpgid(p->pid, j->pgrp);
550 tcsetpgrp(tty_fd, j->pgrp);
597 remove_job(j, "child");
626 j_startjob(j);
628 j->coproc_id = coproc.id;
632 coproc.job = (void *)j;
635 j_set_async(j);
637 shf_fprintf(shl_out, "[%d]", j->job);
638 for (p = j->proc_list; p; p = p->next)
645 rv = j_waitj(j, jwflags, "jw:last proc");
681 Job *j; local
688 j = last_job;
689 if (!j || !(j->flags & JF_STARTED)) {
690 if (!j)
701 rv = j_waitj(j, JW_NONE, "waitlast");
715 Job *j; local
729 for (j = job_list; j; j = j->next)
731 if (j->ppid == procpid && j->state == PRUNNING)
733 if (!j) {
739 } else if ((j = j_lookup(cp, &ecode))) {
742 if (j->ppid != procpid) {
758 rv = j_waitj(j, flags, "jw:waitfor");
775 Job *j; local
783 if ((j = j_lookup(cp, &ecode)) == NULL) {
791 if (j->pgrp == 0) {
793 if (kill_job(j, sig) < 0) {
799 if (j->state == PSTOPPED && (sig == SIGTERM || sig == SIGHUP))
800 mksh_killpg(j->pgrp, SIGCONT);
802 if (mksh_killpg(j->pgrp, sig) < 0) {
820 Job *j; local
828 if ((j = j_lookup(cp, &ecode)) == NULL) {
834 if (j->pgrp == 0) {
841 shprintf("[%d] ", j->job);
844 for (p = j->proc_list; p != NULL; p = p->next) {
857 j->state = PRUNNING;
859 put_job(j, PJ_PAST_STOPPED);
861 j_set_async(j);
864 if (j->state == PRUNNING) {
865 if (ttypgrp_ok && (j->flags & JF_SAVEDTTY))
866 mksh_tcset(tty_fd, &j->ttystat);
869 tcsetpgrp(tty_fd, (j->flags & JF_SAVEDTTYPGRP) ?
870 j->saved_ttypgrp : j->pgrp) < 0) {
872 if (j->flags & JF_SAVEDTTY)
877 (long)((j->flags & JF_SAVEDTTYPGRP) ?
878 j->saved_ttypgrp : j->pgrp),
883 j->flags |= JF_FG;
884 j->flags &= ~JF_KNOWN;
885 if (j == async_job)
889 if (j->state == PRUNNING && mksh_killpg(j->pgrp, SIGCONT) < 0) {
893 j->flags &= ~JF_FG;
894 if (ttypgrp_ok && (j->flags & JF_SAVEDTTY))
908 j->flags &= ~(JF_SAVEDTTY | JF_SAVEDTTYPGRP);
910 rv = j_waitj(j, JW_NONE, "jw:resume");
921 Job *j; local
924 for (j = job_list; j != NULL; j = j->next) {
926 if (j->ppid == procpid && j->state == PSTOPPED)
930 j->ppid == procpid && j->state == PRUNNING)
951 Job *j, *tmp; local
967 if ((j = j_lookup(cp, &ecode)) == NULL) {
975 j = job_list;
977 for (; j; j = j->next) {
978 if ((!(j->flags & JF_ZOMBIE) || zflag) &&
979 (!nflag || (j->flags & JF_CHANGED))) {
980 j_print(j, how, shl_stdout);
981 if (j->state == PEXITED || j->state == PSIGNALLED)
982 j->flags |= JF_REMOVE;
988 for (j = job_list; j; j = tmp) {
989 tmp = j->next;
990 if (j->flags & JF_REMOVE)
991 remove_job(j, Tjobs);
1003 Job *j, *tmp; local
1009 for (j = job_list; j; j = j->next) {
1011 if (Flag(FMONITOR) && (j->flags & JF_CHANGED))
1012 j_print(j, JP_MEDIUM, shl_out);
1018 if (j->state == PEXITED || j->state == PSIGNALLED)
1019 j->flags |= JF_REMOVE;
1021 for (j = job_list; j; j = tmp) {
1022 tmp = j->next;
1023 if (j->flags & JF_REMOVE) {
1024 if (j == async_job || (j->flags & JF_KNOWN)) {
1025 j->flags = (j->flags & ~JF_REMOVE) | JF_ZOMBIE;
1026 j->job = -1;
1029 remove_job(j, "notify");
1064 j_set_async(Job *j) argument
1070 if (!(j->flags & JF_STARTED)) {
1074 async_job = j;
1075 async_pid = j->last_proc->pid;
1101 j_startjob(Job *j) argument
1105 j->flags |= JF_STARTED;
1106 for (p = j->proc_list; p->next; p = p->next)
1108 j->last_proc = p;
1125 j_waitj(Job *j, argument
1139 j->flags |= JF_WAITING;
1141 j->flags |= JF_W_ASYNCNOTIFY;
1148 while (j->state == PRUNNING ||
1149 ((flags & JW_STOPPEDWAIT) && j->state == PSTOPPED)) {
1163 int oldf = j->flags & (JF_WAITING|JF_W_ASYNCNOTIFY);
1164 j->flags &= ~(JF_WAITING|JF_W_ASYNCNOTIFY);
1167 j->flags |= oldf;
1170 j->flags &= ~(JF_WAITING|JF_W_ASYNCNOTIFY);
1174 j->flags &= ~(JF_WAITING|JF_W_ASYNCNOTIFY);
1176 if (j->flags & JF_FG) {
1177 j->flags &= ~JF_FG;
1179 if (Flag(FMONITOR) && ttypgrp_ok && j->pgrp) {
1191 if (j->state == PSTOPPED &&
1192 (j->saved_ttypgrp = tcgetpgrp(tty_fd)) >= 0)
1193 j->flags |= JF_SAVEDTTYPGRP;
1198 if (j->state == PSTOPPED) {
1199 j->flags |= JF_SAVEDTTY;
1200 mksh_tcget(tty_fd, &j->ttystat);
1214 if (j->state == PEXITED && j->status == 0 &&
1215 (j->flags & JF_USETTYMODE)) {
1231 if (j->state == PSTOPPED)
1232 j->flags &= ~JF_USETTYMODE;
1242 if (Flag(FMONITOR) && j->state == PSIGNALLED &&
1243 WIFSIGNALED(j->last_proc->status)) {
1246 if ((termsig = WTERMSIG(j->last_proc->status)) > 0 &&
1254 j_usrtime = j->usrtime;
1255 j_systime = j->systime;
1256 rv = j->status;
1258 if (!(p = j->proc_list)) {
1302 && (!Flag(FMONITOR) || j->state != PSTOPPED)
1305 j_print(j, JP_SHORT, shl_out);
1308 if (j->state != PSTOPPED
1313 remove_job(j, where);
1328 Job *j; local
1347 for (j = job_list; j; j = j->next)
1348 if (j->ppid == procpid && !(j->flags & JF_STARTED)) {
1380 for (j = job_list; j != NULL; j = j->next)
1381 for (p = j->proc_list; p != NULL; p = p->next)
1385 if (j == NULL) {
1394 timeradd(&j->usrtime, &ru1.ru_utime, &j->usrtime);
1395 timersub(&j->usrtime, &ru0.ru_utime, &j->usrtime);
1396 timeradd(&j->systime, &ru1.ru_stime, &j->systime);
1397 timersub(&j->systime, &ru0.ru_stime, &j->systime);
1406 p->state = j->state = PRUNNING;
1418 check_job(j);
1442 check_job(Job *j) argument
1448 if (!(j->flags & JF_STARTED)) {
1450 (unsigned int)j->flags);
1455 for (p=j->proc_list; p != NULL; p = p->next) {
1462 j->state = jstate;
1463 j->status = proc_errorlevel(j->last_proc);
1470 if (j->state == PEXITED || j->state == PSIGNALLED) {
1475 if (coproc.job == j) {
1486 if (j->coproc_id && j->coproc_id == coproc.id &&
1491 j->flags |= JF_CHANGED;
1493 if (Flag(FMONITOR) && !(j->flags & JF_XXCOM)) {
1498 if (j->state == PSTOPPED)
1499 put_job(j, PJ_ON_FRONT);
1501 (j->flags & (JF_WAITING|JF_W_ASYNCNOTIFY)) != JF_WAITING) {
1517 j_print(j, JP_MEDIUM, shl_j);
1519 if (!(j->flags & JF_WAITING) && j->state != PSTOPPED)
1520 remove_job(j, "notify");
1528 !(j->flags & (JF_WAITING|JF_FG)) &&
1529 j->state != PSTOPPED) {
1530 if (j == async_job || (j->flags & JF_KNOWN)) {
1531 j->flags |= JF_ZOMBIE;
1532 j->job = -1;
1535 remove_job(j, "checkjob");
1545 j_print(Job *j, int how, struct shf *shf) argument
1564 shf_fprintf(shf, Tf_dN, (int)(j->pgrp ? j->pgrp :
1565 (j->last_proc ? j->last_proc->pid : 0)));
1568 j->flags &= ~JF_CHANGED;
1569 filler = j->job > 10 ? "\n " : "\n ";
1570 if (j == job_list)
1572 else if (j == job_list->next)
1575 for (p = j->proc_list; p != NULL;) {
1629 if (p == j->proc_list)
1630 shf_fprintf(shf, "[%d] %c ", j->job, jobchar);
1685 Job *j, *last_match; local
1692 for (j = job_list; j != NULL; j = j->next)
1693 if (j->last_proc && j->last_proc->pid == job)
1694 return (j);
1699 for (j = job_list; j != NULL; j = j->next)
1700 if (j->pgrp && j->pgrp == job)
1701 return (j);
1727 for (j = job_list; j != NULL; j = j->next)
1728 if (j->job == job)
1729 return (j);
1735 for (j = job_list; j != NULL; j = j->next)
1736 for (p = j->proc_list; p != NULL; p = p->next)
1743 last_match = j;
1753 for (j = job_list; j != NULL; j = j->next)
1754 if (strncmp(cp, j->proc_list->command, len) == 0) {
1760 last_match = j;
1784 Job *newj, *j; local
1794 for (j = job_list; j && j->job != i; j = j->next)
1796 if (j == NULL)
1830 remove_job(Job *j, const char *where) argument
1837 while (curr && curr != j) {
1841 if (curr != j) {
1848 for (p = j->proc_list; p != NULL; ) {
1855 if ((j->flags & JF_ZOMBIE) && j->ppid == procpid)
1857 j->next = free_jobs;
1858 free_jobs = j;
1860 if (j == last_job)
1862 if (j == async_job)
1873 put_job(Job *j, int where) argument
1880 while (curr && curr != j) {
1884 if (curr == j)
1889 j->next = job_list;
1890 job_list = j;
1899 j->next = curr;
1900 *prev = j;
1911 kill_job(Job *j, int sig) argument
1916 for (p = j->proc_list; p != NULL; p = p->next)