Lines Matching refs:jp

104 	struct job *jp;  in pgid2job()  local
106 for (jp = joblst; jp != 0 && jp->j_pid != pgid; jp = jp->j_nxtp) in pgid2job()
109 return (jp); in pgid2job()
115 struct job *jp, *njp; in str2job() local
119 jp = pgid2job(stoi(job)); in str2job()
121 jp = jobcur; in str2job()
122 if (*job == '-' && jp) in str2job()
123 jp = jp->j_curp; in str2job()
126 for (jp = joblst; jp && jp->j_jid != i; jp = jp->j_nxtp) in str2job()
132 jp = 0; in str2job()
138 if (jp != 0) in str2job()
141 jp = njp; in str2job()
148 jp = 0; in str2job()
153 if (jp != 0) in str2job()
155 jp = njp; in str2job()
160 if (mustbejob && (jp == 0 || jp->j_jid == 0)) in str2job()
163 return (jp); in str2job()
167 freejob(struct job *jp) in freejob() argument
172 for (njp = &joblst; *njp != jp; njp = &(*njp)->j_nxtp) in freejob()
175 for (cjp = &jobcur; *cjp != jp; cjp = &(*cjp)->j_curp) in freejob()
178 *njp = jp->j_nxtp; in freejob()
179 *cjp = jp->j_curp; in freejob()
180 free(jp); in freejob()
194 struct job *jp; in collect_fg_job() local
198 for (jp = joblst; jp; jp = jp->j_nxtp) in collect_fg_job()
199 if (jp->j_flag & J_FOREGND) in collect_fg_job()
202 if (!jp) in collect_fg_job()
213 pid = waitpid(jp->j_pid, &stat, 0); in collect_fg_job()
214 if (pid == jp->j_pid || (pid == -1 && errno == ECHILD)) in collect_fg_job()
224 statjob(struct job *jp, int stat, int fg, int rc) in statjob() argument
230 if (jp->j_flag & J_STOPPED) { in statjob()
231 jp->j_flag &= ~(J_STOPPED|J_SIGNALED|J_SAVETTY); in statjob()
232 jp->j_flag |= J_RUNNING; in statjob()
233 if (!fg && jp->j_jid) { in statjob()
234 jp->j_flag |= J_NOTIFY; in statjob()
239 jp->j_xval = WSTOPSIG(stat); in statjob()
240 jp->j_flag &= ~J_RUNNING; in statjob()
241 jp->j_flag |= (J_SIGNALED|J_STOPPED); in statjob()
242 jp->j_pgid = getpgid(jp->j_pid); in statjob()
243 jp->j_tgid = jp->j_pgid; in statjob()
245 if (tgid = settgid(mypgid, jp->j_pgid)) in statjob()
246 jp->j_tgid = tgid; in statjob()
248 jp->j_flag |= J_SAVETTY; in statjob()
249 tcgetattr(0, &jp->j_stty); in statjob()
253 if (jp->j_jid) { in statjob()
254 jp->j_flag |= J_NOTIFY; in statjob()
258 jp->j_flag &= ~J_RUNNING; in statjob()
259 jp->j_flag |= J_DONE; in statjob()
263 jp->j_xval = WTERMSIG(stat); in statjob()
264 jp->j_flag |= J_SIGNALED; in statjob()
266 jp->j_flag |= J_DUMPED; in statjob()
267 if (!fg || jp->j_xval != SIGINT) { in statjob()
268 jp->j_flag |= J_NOTIFY; in statjob()
272 jp->j_xval = WEXITSTATUS(stat); in statjob()
273 jp->j_flag &= ~J_SIGNALED; in statjob()
274 if (!fg && jp->j_jid) { in statjob()
275 jp->j_flag |= J_NOTIFY; in statjob()
280 if (!settgid(mypgid, jp->j_pgid) || in statjob()
281 !settgid(mypgid, getpgid(jp->j_pid))) in statjob()
286 exitval = jp->j_xval; in statjob()
287 if (jp->j_flag & J_SIGNALED) in statjob()
291 if (done && !(jp->j_flag & J_NOTIFY)) in statjob()
292 freejob(jp); in statjob()
312 struct job *jp; in collectjobs() local
324 if (jp = pgid2job(pid)) in collectjobs()
325 (void) statjob(jp, stat, 0, 0); in collectjobs()
333 struct job *jp; in freejobs() local
339 for (jp = joblst; jp; jp = jp->j_nxtp) { in freejobs()
340 if (jp->j_flag & J_NOTIFY) { in freejobs()
341 if (jp->j_jid) in freejobs()
342 printjob(jp, PR_DFL); in freejobs()
343 else if (jp->j_flag & J_FOREGND) in freejobs()
344 printjob(jp, PR_STAT); in freejobs()
346 printjob(jp, PR_STAT|PR_PGID); in freejobs()
353 for (jp = joblst; jp; jp = jp->j_nxtp) { in freejobs()
354 if (jp->j_flag & J_DONE) in freejobs()
355 freejob(jp); in freejobs()
361 waitjob(struct job *jp) in waitjob() argument
365 pid_t pid = jp->j_pid; in waitjob()
384 done = statjob(jp, stat, 1, 1); in waitjob()
412 restartjob(struct job *jp, int fg) in restartjob() argument
414 if (jp != jobcur) { in restartjob()
417 for (t = jobcur; t->j_curp != jp; t = t->j_curp) in restartjob()
419 t->j_curp = jp->j_curp; in restartjob()
420 jp->j_curp = jobcur; in restartjob()
421 jobcur = jp; in restartjob()
424 if (jp->j_flag & J_SAVETTY) { in restartjob()
425 jp->j_stty.c_lflag &= ~TOSTOP; in restartjob()
426 jp->j_stty.c_lflag |= (mystty.c_lflag&TOSTOP); in restartjob()
427 jp->j_stty.c_cc[VSUSP] = mystty.c_cc[VSUSP]; in restartjob()
428 jp->j_stty.c_cc[VDSUSP] = mystty.c_cc[VDSUSP]; in restartjob()
429 (void) tcsetattr(0, TCSADRAIN, &jp->j_stty); in restartjob()
431 (void) settgid(jp->j_tgid, mypgid); in restartjob()
433 (void) kill(-(jp->j_pgid), SIGCONT); in restartjob()
434 if (jp->j_tgid != jp->j_pgid) in restartjob()
435 (void) kill(-(jp->j_tgid), SIGCONT); in restartjob()
436 jp->j_flag &= ~(J_STOPPED|J_SIGNALED|J_SAVETTY); in restartjob()
437 jp->j_flag |= J_RUNNING; in restartjob()
439 jp->j_flag |= J_FOREGND; in restartjob()
440 printjob(jp, PR_JID|PR_CMD); in restartjob()
441 waitjob(jp); in restartjob()
443 jp->j_flag &= ~J_FOREGND; in restartjob()
444 printjob(jp, PR_JID|PR_CMD|PR_AMP); in restartjob()
449 printjob(struct job *jp, int propts) in printjob() argument
453 if (jp->j_flag & J_NOTIFY) { in printjob()
455 jp->j_flag &= ~J_NOTIFY; in printjob()
460 prn_buff(jp->j_jid); in printjob()
469 if (jobcur == jp) in printjob()
471 else if (jobcur != 0 && jobcur->j_curp == jp) in printjob()
480 prn_buff(jp->j_pid); in printjob()
489 if (jp->j_flag & J_SIGNALED) { in printjob()
491 if ((sigstr = strsignal(jp->j_xval)) != NULL) { in printjob()
495 itos(jp->j_xval); in printjob()
501 if (jp->j_flag & J_DUMPED) { in printjob()
506 } else if (jp->j_flag & J_DONE) { in printjob()
507 itos(jp->j_xval); in printjob()
512 itos(jp->j_xval); in printjob()
527 prs_buff(jp->j_cmd); in printjob()
542 prs_buff(jp->j_pwd); in printjob()
588 struct job *jp; local
590 for (jp = joblst; jp; jp = jp->j_nxtp) {
591 if (jp->j_jid && (jp->j_flag & J_STOPPED)) {
599 for (jp = joblst; jp; jp = jp->j_nxtp) {
600 if (jp->j_jid && (jp->j_flag & J_RUNNING)) {
632 struct job *jp, **jpp; in allocjob() local
641 jp = (struct job *) alloc(sizeof (struct job) + cmdlen + cwdlen); in allocjob()
642 if (jp == 0) in allocjob()
645 jp->j_cmd = ((char *)jp) + sizeof (struct job); in allocjob()
646 strcpy(jp->j_cmd, cmd); in allocjob()
647 jp->j_pwd = jp->j_cmd + cmdlen; in allocjob()
648 strcpy(jp->j_pwd, cwd); in allocjob()
662 jp->j_jid = jid; in allocjob()
664 thisjob = jp; in allocjob()
670 struct job *jp, *sjp; in clearjobs() local
672 for (jp = joblst; jp; jp = sjp) { in clearjobs()
673 sjp = jp->j_nxtp; in clearjobs()
674 free(jp); in clearjobs()
756 struct job *jp; local
809 jp = str2job(cmd, cp, 1);
810 itos(jp->j_pid);
833 for (jp = joblst; jp; jp = jp->j_nxtp) {
834 if (jp->j_jid)
835 printjob(jp, propts);
858 struct job *jp; in sysfgbg() local
859 for (jp = jobcur; ; jp = jp->j_curp) { in sysfgbg()
860 if (jp == 0) in sysfgbg()
862 if (jp->j_jid) in sysfgbg()
865 restartjob(jp, fg); in sysfgbg()
883 struct job *jp; local
895 if ((jp = str2job(cmd, *++argv, 0)) == 0)
897 if (!(jp->j_flag & J_RUNNING))
899 if (waitpid(jp->j_pid, &stat, wflags) <= 0)
901 (void) statjob(jp, stat, 0, 1);
913 struct job *jp; in sigv() local
914 jp = str2job(cmd, args, 1); in sigv()
915 id = jp->j_pgid; in sigv()
1055 struct job *jp; in hupforegnd() local
1058 for (jp = joblst; jp != NULL; jp = jp->j_nxtp) { in hupforegnd()
1059 if (jp->j_flag & J_FOREGND) { in hupforegnd()
1060 (void) kill(jp->j_pid, SIGHUP); in hupforegnd()