Lines Matching refs:pw
169 # define job_unstop(pw) argument
184 register struct process *pw,*pwnext; in job_chldtrap() local
191 for(pw=job.pwlist;pw;pw=pwnext) in job_chldtrap()
193 pwnext = pw->p_nxtjob; in job_chldtrap()
194 if((pw->p_flag&(P_BG|P_DONE)) != (P_BG|P_DONE)) in job_chldtrap()
196 pw->p_flag &= ~P_BG; in job_chldtrap()
199 shp->bckpid = pw->p_pid; in job_chldtrap()
200 shp->savexit = pw->p_exit; in job_chldtrap()
201 if(pw->p_flag&P_SIGNALLED) in job_chldtrap()
204 if(pw->p_pid==bckpid && unpost) in job_chldtrap()
205 job_unpost(pw,0); in job_chldtrap()
247 register struct process *pw; in job_reap() local
299 if(!(pw=job_bypid(pid))) in job_reap()
302 …%4d: reap pid=%d critical=%d unknown job pid=%d pw=%x\n",__LINE__,getpid(),job.in_critical,pid,pw); in job_reap()
306 pw = &dummy; in job_reap()
307 pw->p_exit = 0; in job_reap()
308 pw->p_pgrp = 0; in job_reap()
309 pw->p_exitmin = 0; in job_reap()
313 pw->p_flag = 0; in job_reap()
314 lastpid = pw->p_pid = pid; in job_reap()
324 px=job_byjid(pw->p_job); in job_reap()
334 pw->p_flag |= (P_NOTIFY|P_SIGNALLED|P_STOPPED); in job_reap()
335 pw->p_exit = WSTOPSIG(wstat); in job_reap()
336 if(pw->p_pgrp && pw->p_pgrp==job.curpgid && sh_isstate(SH_STOPOK)) in job_reap()
337 sh_fault(pw->p_exit); in job_reap()
341 pw->p_flag &= ~(P_NOTIFY|P_SIGNALLED|P_STOPPED); in job_reap()
356 pw->p_flag &= ~(P_STOPPED|P_SIGNALLED); in job_reap()
359 pw->p_flag |= (P_DONE|P_NOTIFY|P_SIGNALLED); in job_reap()
361 pw->p_flag |= P_COREDUMP; in job_reap()
362 pw->p_exit = WTERMSIG(wstat); in job_reap()
366 if(pw->p_pgrp && pw->p_pgrp==job.curpgid && pw->p_exit==SIGINT && sh_isstate(SH_STOPOK)) in job_reap()
368 pw->p_flag &= ~P_NOTIFY; in job_reap()
376 pw->p_flag |= (P_DONE|P_NOTIFY); in job_reap()
377 pw->p_exit = pw->p_exitmin; in job_reap()
378 if(WEXITSTATUS(wstat) > pw->p_exitmin) in job_reap()
379 pw->p_exit = WEXITSTATUS(wstat); in job_reap()
382 if((pw->p_flag&P_DONE) && (pw->p_flag&P_BG)) in job_reap()
394 pw->p_flag &= ~P_BG; in job_reap()
397 if(pw->p_pgrp==0) in job_reap()
398 pw->p_flag &= ~P_NOTIFY; in job_reap()
400 if(jp && pw== &dummy) in job_reap()
402 jp->exitval = pw->p_exit; in job_reap()
403 if(pw->p_flag&P_SIGNALLED) in job_reap()
407 …with status=%x exit=%d\n",__LINE__,getpid(),job.in_critical,pw->p_job,pid,pw->p_flag,wstat,pw->p_e… in job_reap()
411 if(px && pw != px) in job_reap()
412 pw->p_flag &= ~P_NOTIFY; in job_reap()
413 if(pid==pw->p_fgrp && pid==tcgetpgrp(JOBTTY)) in job_reap()
415 px = job_byjid((int)pw->p_job); in job_reap()
440 job_list(pw,JOB_NFLAG|JOB_NLFLAG); in job_reap()
441 job_unpost(pw,1); in job_reap()
613 register struct process *pw; in job_close() local
624 for(pw=job.pwlist;pw;pw=pw->p_nxtjob) in job_close()
626 if(!(pw->p_flag&P_STOPPED)) in job_close()
628 if(!(pw->p_flag&P_DONE)) in job_close()
633 killpg(pw->p_pgrp,SIGTERM); in job_close()
688 static void job_set(register struct process *pw) in job_set() argument
692 if(pw->p_flag&P_STTY) in job_set()
695 tty_set(job.fd,TCSAFLUSH,&pw->p_stty); in job_set()
698 if((pw->p_flag&P_STOPPED) || tcgetpgrp(job.fd) == sh.pid) in job_set()
699 tcsetpgrp(job.fd,pw->p_fgrp); in job_set()
701 job_unstop(pw); in job_set()
705 static void job_reset(register struct process *pw) in job_reset() argument
709 job_fgrp(pw,tcgetpgrp(job.fd)); in job_reset()
714 if(!(pw->p_flag&P_FG)) in job_reset()
716 if(pw && (pw->p_flag&P_SIGNALLED) && pw->p_exit!=SIGHUP) in job_reset()
718 if(tty_get(job.fd,&pw->p_stty) == 0) in job_reset()
719 pw->p_flag |= P_STTY; in job_reset()
734 register struct process *pw; in job_bwait() local
744 pw = job_bystring(jp); in job_bwait()
746 if(pw) in job_bwait()
747 pid = pw->p_pid; in job_bwait()
765 register struct process *pw; in job_walk() local
773 pw = job.pwlist; in job_walk()
777 for(;pw;pw=px) in job_walk()
779 px = pw->p_nxtjob; in job_walk()
780 if(pw->p_env != sh.jobenv) in job_walk()
782 if((*fun)(pw,arg)) in job_walk()
789 while(pw && (pw->p_env!=sh.jobenv || pw->p_pgrp==0)) in job_walk()
790 pw = pw->p_nxtjob; in job_walk()
791 if((*fun)(pw,arg)) in job_walk()
800 pw = job_bystring(jobid); in job_walk()
810 if(!(pw = job_bypid(pid))) in job_walk()
812 pw = &dummy; in job_walk()
813 pw->p_pid = pid; in job_walk()
814 pw->p_pgrp = pid; in job_walk()
818 if((*fun)(pw,arg)) in job_walk()
829 int job_terminate(register struct process *pw,register int sig) in job_terminate() argument
831 if(pw->p_pgrp && !(pw->p_flag&P_DISOWN)) in job_terminate()
832 job_kill(pw,sig); in job_terminate()
843 int job_list(struct process *pw,register int flag) in job_list() argument
845 register struct process *px = pw; in job_list()
849 if(!pw || pw->p_job<=0) in job_list()
851 if(pw->p_env != sh.jobenv) in job_list()
911 hist_list(sh.hist_ptr,outfile,pw->p_name,0,";"); in job_list()
926 register struct process *pw=job.pwlist; in job_bystring() local
928 if(*ajob++ != '%' || !pw) in job_bystring()
932 pw = job_byjid((int)strtol(ajob, (char**)0, 10)); in job_bystring()
937 if(pw) in job_bystring()
938 pw = job.pwlist->p_nxtjob; in job_bystring()
941 pw = job_byname(ajob); in job_bystring()
942 if(pw && pw->p_flag) in job_bystring()
943 return(pw); in job_bystring()
951 int job_kill(register struct process *pw,register int sig) in job_kill() argument
963 if(pw==0) in job_kill()
965 pid = pw->p_pid; in job_kill()
983 if(pw->p_flag&P_STOPPED) in job_kill()
984 pw->p_flag &= ~(P_STOPPED|P_SIGNALLED); in job_kill()
993 job_unstop(job_bypid(pw->p_pid)); in job_kill()
1008 if(pid = pw->p_pgrp) in job_kill()
1013 job_unstop(pw); in job_kill()
1018 while(pw && pw->p_pgrp==0 && (r=kill(pw->p_pid,sig))>=0) in job_kill()
1022 kill(pw->p_pid,SIGCONT); in job_kill()
1024 pw = pw->p_nxtproc; in job_kill()
1030 if(pw && by_number) in job_kill()
1051 register struct process *pw = job.pwlist; in job_byname() local
1060 for(;pw;pw=pw->p_nxtjob) in job_byname()
1062 if(hist_match(sh.hist_ptr,pw->p_name,cp,flag)>=0) in job_byname()
1066 pz = pw; in job_byname()
1085 register struct process *pw, *px; in job_clear() local
1090 for(pw=job.pwlist; pw; pw=pwnext) in job_clear()
1092 pwnext = pw->p_nxtjob; in job_clear()
1093 while(px=pw) in job_clear()
1095 pw = pw->p_nxtproc; in job_clear()
1129 register struct process *pw; in job_post() local
1153 if(pw = job_bypid(pid)) in job_post()
1154 job_unpost(pw,0); in job_post()
1155 if(join && (pw=job_bypid(join))) in job_post()
1158 if((pw=job_byjid(pw->p_job)) != job.pwlist) in job_post()
1160 job_unlink(pw); in job_post()
1161 pw->p_nxtjob = job.pwlist; in job_post()
1162 job.pwlist = pw; in job_post()
1165 if(pw=freelist) in job_post()
1166 freelist = pw->p_nxtjob; in job_post()
1168 pw = new_of(struct process,0); in job_post()
1169 pw->p_flag = 0; in job_post()
1174 pw->p_nxtjob = job.pwlist->p_nxtjob; in job_post()
1175 pw->p_nxtproc = job.pwlist; in job_post()
1176 pw->p_job = job.pwlist->p_job; in job_post()
1181 while((pw->p_job = job_alloc()) < 0) in job_post()
1183 pw->p_nxtjob = job.pwlist; in job_post()
1184 pw->p_nxtproc = 0; in job_post()
1186 job.pwlist = pw; in job_post()
1187 pw->p_env = sh.curenv; in job_post()
1188 pw->p_pid = pid; in job_post()
1190 pw->p_flag = P_EXITSAVE; in job_post()
1191 pw->p_exitmin = sh.xargexit; in job_post()
1192 pw->p_exit = 0; in job_post()
1197 pw->p_fgrp = job.curpgid; in job_post()
1200 pw->p_fgrp = 0; in job_post()
1201 pw->p_pgrp = pw->p_fgrp; in job_post()
1203 …ritical=%d job=%d pid=%d pgid=%d savesig=%d join=%d\n",__LINE__,getpid(),job.in_critical,pw->p_job, in job_post()
1204 pw->p_pid,pw->p_pgrp,job.savesig,join); in job_post()
1209 pw->p_name=hist_tell(sh.hist_ptr,(int)hp->histind-1); in job_post()
1211 pw->p_name = -1; in job_post()
1215 pw->p_exit = val; in job_post()
1216 if(pw->p_exit==SH_STOPSIG) in job_post()
1218 pw->p_flag |= (P_SIGNALLED|P_STOPPED); in job_post()
1219 pw->p_exit = 0; in job_post()
1221 else if(pw->p_exit >= SH_EXITSIG) in job_post()
1223 pw->p_flag |= P_DONE|P_SIGNALLED; in job_post()
1224 pw->p_exit &= SH_EXITMASK; in job_post()
1227 pw->p_flag |= (P_DONE|P_NOTIFY); in job_post()
1230 if(bg && !(pw->p_flag&P_DONE)) in job_post()
1231 pw->p_flag |= P_BG; in job_post()
1235 return(pw->p_job); in job_post()
1244 register struct process *pw, *px; in job_bypid() local
1245 for(pw=job.pwlist; pw; pw=pw->p_nxtjob) in job_bypid()
1246 for(px=pw; px; px=px->p_nxtproc) in job_bypid()
1260 register struct process *pw; in job_byjid() local
1261 for(pw=job.pwlist;pw; pw = pw->p_nxtjob) in job_byjid()
1263 if(pw->p_job==jobid) in job_byjid()
1266 return(pw); in job_byjid()
1272 static void job_prmsg(register struct process *pw) in job_prmsg() argument
1274 if(pw->p_exit!=SIGINT && pw->p_exit!=SIGPIPE) in job_prmsg()
1277 msg = job_sigmsg((int)(pw->p_exit)); in job_prmsg()
1279 if(pw->p_flag&P_COREDUMP) in job_prmsg()
1286 errormsg(SH_DICT,2,"%d: %s%s",pw->p_pid,msg,dump); in job_prmsg()
1300 register struct process *pw=0,*px; in job_wait() local
1316 if(!(pw=job_bypid(pid))) in job_wait()
1325 else if(intr && pw->p_env!=sh.curenv) in job_wait()
1331 jobid = pw->p_job; in job_wait()
1333 pw->p_flag &= ~P_EXITSAVE; in job_wait()
1334 if(pw->p_pgrp && job.parent!= (pid_t)-1) in job_wait()
1337 pwfg = pw; in job_wait()
1340 if(pw) in job_wait()
1341 …h: job line %4d: wait pid=%d critical=%d flags=%o\n",__LINE__,getpid(),job.in_critical,pw->p_flag); in job_wait()
1356 if(px!=pw && (px->p_flag&P_NOTIFY)) in job_wait()
1372 if(pw && (pw->p_flag&(P_DONE|P_STOPPED))) in job_wait()
1375 if(pw->p_flag&P_STOPPED) in job_wait()
1377 pw->p_flag |= P_EXITSAVE; in job_wait()
1380 if( pw->p_exit!=SIGTTIN && pw->p_exit!=SIGTTOU) in job_wait()
1383 killpg(pw->p_pgrp,SIGCONT); in job_wait()
1386 pw->p_flag &= ~(P_NOTIFY|P_SIGNALLED|P_STOPPED|P_EXITSAVE); in job_wait()
1391 if(pw->p_flag&P_SIGNALLED) in job_wait()
1393 pw->p_flag &= ~P_NOTIFY; in job_wait()
1394 job_prmsg(pw); in job_wait()
1396 else if(pw->p_flag&P_DONE) in job_wait()
1397 pw->p_flag &= ~P_NOTIFY; in job_wait()
1398 if(pw->p_job==jobid) in job_wait()
1411 px = pw; in job_wait()
1413 else if(px!=pw) in job_wait()
1424 px = job_unpost(pw,1); in job_wait()
1427 pw = px; in job_wait()
1448 if(pw->p_pgrp) in job_wait()
1450 job_reset(pw); in job_wait()
1452 if((pw->p_flag&P_SIGNALLED) && pw->p_exit==SIGINT && !(sh.sigflag[SIGINT]&SH_SIGOFF)) in job_wait()
1455 else if((pw->p_flag&P_STOPPED) && pw->p_exit==SIGTSTP) in job_wait()
1464 if(pw->p_pid == tcgetpgrp(JOBTTY)) in job_wait()
1466 if(pw->p_pgrp==0) in job_wait()
1467 pw->p_pgrp = pw->p_pid; in job_wait()
1468 job_reset(pw); in job_wait()
1478 for(pw=job.pwlist; pw; pw=px) in job_wait()
1480 px = pw->p_nxtjob; in job_wait()
1481 job_unpost(pw,0); in job_wait()
1494 int job_switch(register struct process *pw,int bgflag) in job_switch() argument
1498 if(!pw || !(pw=job_byjid((int)pw->p_job))) in job_switch()
1505 for(; pw; pw=pw->p_nxtproc) in job_switch()
1506 pw->p_flag |= P_DISOWN; in job_switch()
1513 sfprintf(outfile,"[%d]\t",(int)pw->p_job); in job_switch()
1514 sh.bckpid = pw->p_pid; in job_switch()
1516 pw->p_flag |= P_BG; in job_switch()
1522 job_unlink(pw); in job_switch()
1523 pw->p_nxtjob = job.pwlist; in job_switch()
1524 job.pwlist = pw; in job_switch()
1527 hist_list(sh.hist_ptr,outfile,pw->p_name,'&',";"); in job_switch()
1532 if(!(pw=job_unpost(pw,1))) in job_switch()
1538 pw->p_flag |= P_FG; in job_switch()
1540 pw->p_flag &= ~P_BG; in job_switch()
1542 job_wait(pw->p_pid); in job_switch()
1545 else if(pw->p_flag&P_STOPPED) in job_switch()
1546 job_unstop(pw); in job_switch()
1558 static void job_fgrp(register struct process *pw, int newgrp) in job_fgrp() argument
1560 for(; pw; pw=pw->p_nxtproc) in job_fgrp()
1561 pw->p_fgrp = newgrp; in job_fgrp()
1570 register struct process *pw; in job_unstop() local
1572 for(pw=px ;pw ;pw=pw->p_nxtproc) in job_unstop()
1574 if(pw->p_flag&P_STOPPED) in job_unstop()
1577 pw->p_flag &= ~(P_STOPPED|P_SIGNALLED|P_NOTIFY); in job_unstop()
1599 register struct process *pw; in job_unpost() local
1605 pwtop = pw = job_byjid((int)pwtop->p_job); in job_unpost()
1607 if(pw->p_flag&P_BG) in job_unpost()
1608 return(pw); in job_unpost()
1610 for(; pw && (pw->p_flag&P_DONE)&&(notify||!(pw->p_flag&P_NOTIFY)||pw->p_env); pw=pw->p_nxtproc); in job_unpost()
1611 if(pw) in job_unpost()
1612 return(pw); in job_unpost()
1615 for(pw=pwtop; pw; pw=pw->p_nxtproc) in job_unpost()
1618 if((pw->p_flag&P_EXITSAVE) || pw->p_pid==sh.spid) in job_unpost()
1622 if(jp = jobsave_create(pw->p_pid)) in job_unpost()
1624 jp->exitval = pw->p_exit; in job_unpost()
1625 if(pw->p_flag&P_SIGNALLED) in job_unpost()
1628 pw->p_flag &= ~P_EXITSAVE; in job_unpost()
1630 pw->p_flag &= ~P_DONE; in job_unpost()
1632 pw->p_nxtjob = freelist; in job_unpost()
1633 freelist = pw; in job_unpost()
1647 static void job_unlink(register struct process *pw) in job_unlink() argument
1650 if(pw==job.pwlist) in job_unlink()
1652 job.pwlist = pw->p_nxtjob; in job_unlink()
1657 if(px->p_nxtjob == pw) in job_unlink()
1659 px->p_nxtjob = pw->p_nxtjob; in job_unlink()
1679 register struct process *pw; in job_alloc() local
1682 if((pw=job_byjid(j))&& !job_unpost(pw,0)) in job_alloc()
1795 register struct process *pw, *px, *pwnext; in job_subrestore() local
1810 for(pw=job.pwlist; pw; pw=pwnext) in job_subrestore()
1812 pwnext = pw->p_nxtjob; in job_subrestore()
1813 if(pw->p_env != sh.curenv || pw->p_pid==sh.pipepid) in job_subrestore()
1815 for(px=pw; px; px=px->p_nxtproc) in job_subrestore()
1817 job_unpost(pw,0); in job_subrestore()