Lines Matching refs:pw

186 #   define job_unstop(pw)  argument
201 register struct process *pw,*pwnext; in job_chldtrap() local
208 for(pw=job.pwlist;pw;pw=pwnext) in job_chldtrap()
210 pwnext = pw->p_nxtjob; in job_chldtrap()
211 if((pw->p_flag&(P_BG|P_DONE)) != (P_BG|P_DONE)) in job_chldtrap()
213 pw->p_flag &= ~P_BG; in job_chldtrap()
216 shp->bckpid = pw->p_pid; in job_chldtrap()
217 shp->savexit = pw->p_exit; in job_chldtrap()
218 if(pw->p_flag&P_SIGNALLED) in job_chldtrap()
221 if(pw->p_pid==bckpid && unpost) in job_chldtrap()
222 job_unpost(pw,0); in job_chldtrap()
287 struct process *pw,*pwnext; in job_cowalk() local
308 for(n=0,pw=job.pwlist; pw; pw=pwnext) in job_cowalk()
310 pwnext = pw->p_nxtjob; in job_cowalk()
311 if((cp && val==pw->p_pid) || (pw->p_cojob && pw->p_cojob->local==(void*)csp)) in job_cowalk()
315 if(pw->p_flag&P_DONE) in job_cowalk()
317 r |= (*fun)(pw,arg); in job_cowalk()
320 job_wait(-pw->p_pid); in job_cowalk()
341 register struct process *pw; in job_reap() local
352 for(pw=job.pwlist;pw;pw=pw->p_nxtjob) in job_reap()
354 if(pw->p_cojob && !(pw->p_flag&P_DONE)) in job_reap()
357 cojobs = (pw!=0); in job_reap()
434 if(!(pw=job_bypid(pid))) in job_reap()
437 …%4d: reap pid=%d critical=%d unknown job pid=%d pw=%x\n",__LINE__,getpid(),job.in_critical,pid,pw); in job_reap()
441 pw = &dummy; in job_reap()
442 pw->p_exit = 0; in job_reap()
443 pw->p_pgrp = 0; in job_reap()
444 pw->p_exitmin = 0; in job_reap()
448 pw->p_flag = 0; in job_reap()
449 lastpid = pw->p_pid = pid; in job_reap()
459 px=job_byjid(pw->p_job); in job_reap()
461 pw->p_flag &= ~(P_NOTIFY|P_SIGNALLED|P_STOPPED); in job_reap()
464 pw->p_flag |= (P_NOTIFY|P_SIGNALLED|P_STOPPED); in job_reap()
465 pw->p_exit = WSTOPSIG(wstat); in job_reap()
466 if(pw->p_pgrp && pw->p_pgrp==job.curpgid && sh_isstate(SH_STOPOK)) in job_reap()
467 kill(getpid(),pw->p_exit); in job_reap()
491 pw->p_flag &= ~(P_STOPPED|P_SIGNALLED); in job_reap()
494 pw->p_flag |= (P_DONE|P_NOTIFY|P_SIGNALLED); in job_reap()
496 pw->p_flag |= P_COREDUMP; in job_reap()
497 pw->p_exit = WTERMSIG(wstat); in job_reap()
501 if(pw->p_pgrp && pw->p_pgrp==job.curpgid && pw->p_exit==SIGINT && sh_isstate(SH_STOPOK)) in job_reap()
503 pw->p_flag &= ~P_NOTIFY; in job_reap()
511 pw->p_flag |= (P_DONE|P_NOTIFY); in job_reap()
512 pw->p_exit = pw->p_exitmin; in job_reap()
513 if(WEXITSTATUS(wstat) > pw->p_exitmin) in job_reap()
514 pw->p_exit = WEXITSTATUS(wstat); in job_reap()
517 if((pw->p_flag&P_DONE) && (pw->p_flag&P_BG)) in job_reap()
529 pw->p_flag &= ~P_BG; in job_reap()
532 if(pw->p_pgrp==0) in job_reap()
533 pw->p_flag &= ~P_NOTIFY; in job_reap()
535 if(jp && pw== &dummy) in job_reap()
537 jp->exitval = pw->p_exit; in job_reap()
538 if(pw->p_flag&P_SIGNALLED) in job_reap()
542 …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()
546 if(px && pw != px) in job_reap()
547 pw->p_flag &= ~P_NOTIFY; in job_reap()
548 if(pid==pw->p_fgrp && pid==tcgetpgrp(JOBTTY)) in job_reap()
550 px = job_byjid((int)pw->p_job); in job_reap()
575 job_list(pw,JOB_NFLAG|JOB_NLFLAG); in job_reap()
576 job_unpost(pw,1); in job_reap()
749 register struct process *pw; in job_close() local
760 for(pw=job.pwlist;pw;pw=pw->p_nxtjob) in job_close()
762 if(!(pw->p_flag&P_STOPPED)) in job_close()
764 if(!(pw->p_flag&P_DONE)) in job_close()
769 killpg(pw->p_pgrp,SIGTERM); in job_close()
824 static void job_set(register struct process *pw) in job_set() argument
826 Shell_t *shp = pw->p_shp; in job_set()
829 if(pw->p_flag&P_STTY) in job_set()
832 tty_set(job.fd,TCSAFLUSH,&pw->p_stty); in job_set()
835 if((pw->p_flag&P_STOPPED) || tcgetpgrp(job.fd) == shp->gd->pid) in job_set()
836 tcsetpgrp(job.fd,pw->p_fgrp); in job_set()
839 job_unstop(pw); in job_set()
844 static void job_reset(register struct process *pw) in job_reset() argument
848 job_fgrp(pw,tcgetpgrp(job.fd)); in job_reset()
853 if(!(pw->p_flag&P_FG)) in job_reset()
855 if(pw && (pw->p_flag&P_SIGNALLED) && pw->p_exit!=SIGHUP) in job_reset()
857 if(tty_get(job.fd,&pw->p_stty) == 0) in job_reset()
858 pw->p_flag |= P_STTY; in job_reset()
873 register struct process *pw; in job_bwait() local
883 pw = job_bystring(jp); in job_bwait()
885 if(pw) in job_bwait()
886 pid = pw->p_pid; in job_bwait()
911 register struct process *pw; in job_walk() local
919 pw = job.pwlist; in job_walk()
924 for(;pw;pw=px) in job_walk()
926 px = pw->p_nxtjob; in job_walk()
927 if(pw->p_env != sh.jobenv) in job_walk()
929 if((*fun)(pw,arg)) in job_walk()
936 while(pw && (pw->p_env!=sh.jobenv || pw->p_pgrp==0)) in job_walk()
937 pw = pw->p_nxtjob; in job_walk()
938 if((*fun)(pw,arg)) in job_walk()
956 pw = job_bystring(jobid); in job_walk()
960 if(!(pw = job_bypid(pid))) in job_walk()
962 pw = &dummy; in job_walk()
963 pw->p_shp = sh_getinterp(); in job_walk()
964 pw->p_pid = pid; in job_walk()
965 pw->p_pgrp = pid; in job_walk()
969 if((*fun)(pw,arg)) in job_walk()
980 int job_terminate(register struct process *pw,register int sig) in job_terminate() argument
982 if(pw->p_pgrp && !(pw->p_flag&P_DISOWN)) in job_terminate()
983 job_kill(pw,sig); in job_terminate()
994 int job_list(struct process *pw,register int flag) in job_list() argument
997 register struct process *px = pw; in job_list()
1001 if(!pw || pw->p_job<=0) in job_list()
1003 if(pw->p_env != shp->jobenv) in job_list()
1071 hist_list(shgd->hist_ptr,outfile,pw->p_name,0,";"); in job_list()
1086 register struct process *pw=job.pwlist; in job_bystring() local
1088 if(*ajob++ != '%' || !pw) in job_bystring()
1092 pw = job_byjid((int)strtol(ajob, (char**)0, 10)); in job_bystring()
1097 if(pw) in job_bystring()
1098 pw = job.pwlist->p_nxtjob; in job_bystring()
1101 pw = job_byname(ajob); in job_bystring()
1102 if(pw && pw->p_flag) in job_bystring()
1103 return(pw); in job_bystring()
1111 int job_kill(register struct process *pw,register int sig) in job_kill() argument
1124 if(pw==0) in job_kill()
1126 shp = pw->p_shp; in job_kill()
1127 pid = pw->p_pid; in job_kill()
1129 if(pw->p_cojob) in job_kill()
1130 r = cokill(pw->p_cojob->coshell,pw->p_cojob,sig); in job_kill()
1150 if(pw->p_flag&P_STOPPED) in job_kill()
1151 pw->p_flag &= ~(P_STOPPED|P_SIGNALLED); in job_kill()
1160 job_unstop(job_bypid(pw->p_pid)); in job_kill()
1175 if(pid = pw->p_pgrp) in job_kill()
1180 job_unstop(pw); in job_kill()
1185 while(pw && pw->p_pgrp==0 && (r=kill(pw->p_pid,sig))>=0) in job_kill()
1189 kill(pw->p_pid,SIGCONT); in job_kill()
1191 pw = pw->p_nxtproc; in job_kill()
1197 if(pw && by_number) in job_kill()
1216 job_hup(struct process *pw, int sig) in job_hup() argument
1222 if (pw->p_pgrp == 0 || (pw->p_flag & P_DISOWN)) in job_hup()
1226 if(pw->p_cojob) { in job_hup()
1228 r = cokill(pw->p_cojob->coshell,pw->p_cojob,sig); in job_hup()
1235 if (pw->p_pgrp != 0) { in job_hup()
1238 for (px = pw; px != NULL; px = px->p_nxtproc) { in job_hup()
1251 if (killpg(pw->p_pgrp, SIGHUP) >= 0) in job_hup()
1252 job_unstop(pw); in job_hup()
1255 for (; pw != NULL && pw->p_pgrp == 0; pw = pw->p_nxtproc) { in job_hup()
1256 if (pw->p_flag & P_DONE) in job_hup()
1258 if (kill(pw->p_pid, SIGHUP) >= 0) in job_hup()
1259 (void) kill(pw->p_pid, SIGCONT); in job_hup()
1260 pw = pw->p_nxtproc; in job_hup()
1273 register struct process *pw = job.pwlist; in job_byname() local
1282 for(;pw;pw=pw->p_nxtjob) in job_byname()
1284 if(hist_match(shgd->hist_ptr,pw->p_name,cp,flag)>=0) in job_byname()
1288 pz = pw; in job_byname()
1308 register struct process *pw, *px; in job_clear() local
1313 for(pw=job.pwlist; pw; pw=pwnext) in job_clear()
1315 pwnext = pw->p_nxtjob; in job_clear()
1316 while(px=pw) in job_clear()
1318 pw = pw->p_nxtproc; in job_clear()
1352 register struct process *pw; in job_post() local
1376 if(pw = job_bypid(pid)) in job_post()
1377 job_unpost(pw,0); in job_post()
1380 if(pw=job_bypid(join)) in job_post()
1381 val = pw->p_job; in job_post()
1385 if(val && (pw=job_byjid(val)) != job.pwlist) in job_post()
1387 job_unlink(pw); in job_post()
1388 pw->p_nxtjob = job.pwlist; in job_post()
1389 job.pwlist = pw; in job_post()
1392 if(pw=freelist) in job_post()
1393 freelist = pw->p_nxtjob; in job_post()
1395 pw = new_of(struct process,0); in job_post()
1396 pw->p_flag = 0; in job_post()
1401 pw->p_nxtjob = job.pwlist->p_nxtjob; in job_post()
1402 pw->p_nxtproc = job.pwlist; in job_post()
1403 pw->p_job = job.pwlist->p_job; in job_post()
1408 while((pw->p_job = job_alloc()) < 0) in job_post()
1410 pw->p_nxtjob = job.pwlist; in job_post()
1411 pw->p_nxtproc = 0; in job_post()
1413 pw->p_exitval = job.exitval; in job_post()
1415 pw->p_cojob = 0; in job_post()
1418 pw->p_cojob = ((struct cosh*)shp->coshell)->cojob; in job_post()
1422 job.pwlist = pw; in job_post()
1423 pw->p_shp = shp; in job_post()
1424 pw->p_env = shp->curenv; in job_post()
1425 pw->p_pid = pid; in job_post()
1427 pw->p_flag = P_EXITSAVE; in job_post()
1428 pw->p_exitmin = shp->xargexit; in job_post()
1429 pw->p_exit = 0; in job_post()
1434 pw->p_fgrp = job.curpgid; in job_post()
1437 pw->p_fgrp = 0; in job_post()
1438 pw->p_pgrp = pw->p_fgrp; in job_post()
1440 …ritical=%d job=%d pid=%d pgid=%d savesig=%d join=%d\n",__LINE__,getpid(),job.in_critical,pw->p_job, in job_post()
1441 pw->p_pid,pw->p_pgrp,job.savesig,join); in job_post()
1446 pw->p_name=hist_tell(shgd->hist_ptr,(int)hp->histind-1); in job_post()
1448 pw->p_name = -1; in job_post()
1450 if ((val = job_chksave(pid,pw->p_env))>=0 && !jobfork) in job_post()
1452 pw->p_exit = val; in job_post()
1453 if(pw->p_exit==SH_STOPSIG) in job_post()
1455 pw->p_flag |= (P_SIGNALLED|P_STOPPED); in job_post()
1456 pw->p_exit = 0; in job_post()
1458 else if(pw->p_exit >= SH_EXITSIG) in job_post()
1460 pw->p_flag |= P_DONE|P_SIGNALLED; in job_post()
1461 pw->p_exit &= SH_EXITMASK; in job_post()
1464 pw->p_flag |= (P_DONE|P_NOTIFY); in job_post()
1469 if(pw->p_flag&P_DONE) in job_post()
1472 pw->p_flag |= P_BG; in job_post()
1477 return(pw->p_job); in job_post()
1486 register struct process *pw, *px; in job_bypid() local
1487 for(pw=job.pwlist; pw; pw=pw->p_nxtjob) in job_bypid()
1488 for(px=pw; px; px=px->p_nxtproc) in job_bypid()
1502 register struct process *pw; in job_byjid() local
1503 for(pw=job.pwlist;pw; pw = pw->p_nxtjob) in job_byjid()
1505 if(pw->p_job==jobid) in job_byjid()
1508 return(pw); in job_byjid()
1514 static void job_prmsg(register struct process *pw) in job_prmsg() argument
1516 if(pw->p_exit!=SIGINT && pw->p_exit!=SIGPIPE) in job_prmsg()
1519 msg = job_sigmsg((int)(pw->p_exit)); in job_prmsg()
1521 if(pw->p_flag&P_COREDUMP) in job_prmsg()
1528 errormsg(SH_DICT,2,"%d: %s%s",pw->p_pid,msg,dump); in job_prmsg()
1543 register struct process *pw=0,*px; in job_wait() local
1555 if(!job.waitall || !job.curjobid || !(pw = job_byjid(job.curjobid))) in job_wait()
1560 jobid = pw->p_job; in job_wait()
1562 if(!(pw->p_flag&(P_DONE|P_STOPPED))) in job_wait()
1569 if(!(pw=job_bypid(pid))) in job_wait()
1578 else if(intr && pw->p_env!=shp->curenv) in job_wait()
1584 jobid = pw->p_job; in job_wait()
1586 pw->p_flag &= ~P_EXITSAVE; in job_wait()
1587 if(pw->p_pgrp && job.parent!= (pid_t)-1) in job_wait()
1590 pwfg = pw; in job_wait()
1593 if(pw) in job_wait()
1594 …h: job line %4d: wait pid=%d critical=%d flags=%o\n",__LINE__,getpid(),job.in_critical,pw->p_flag); in job_wait()
1609 if(px!=pw && (px->p_flag&P_NOTIFY)) in job_wait()
1625 if(pw && (pw->p_flag&(P_DONE|P_STOPPED))) in job_wait()
1628 if(pw->p_flag&P_STOPPED) in job_wait()
1630 pw->p_flag |= P_EXITSAVE; in job_wait()
1633 if( pw->p_exit!=SIGTTIN && pw->p_exit!=SIGTTOU) in job_wait()
1636 killpg(pw->p_pgrp,SIGCONT); in job_wait()
1639 pw->p_flag &= ~(P_NOTIFY|P_SIGNALLED|P_STOPPED|P_EXITSAVE); in job_wait()
1644 if(pw->p_flag&P_SIGNALLED) in job_wait()
1646 pw->p_flag &= ~P_NOTIFY; in job_wait()
1647 job_prmsg(pw); in job_wait()
1649 else if(pw->p_flag&P_DONE) in job_wait()
1650 pw->p_flag &= ~P_NOTIFY; in job_wait()
1651 if(pw->p_job==jobid) in job_wait()
1655 if(px!=pw) in job_wait()
1666 px = job_unpost(pw,1); in job_wait()
1669 pw = px; in job_wait()
1694 if(pw->p_pgrp) in job_wait()
1696 job_reset(pw); in job_wait()
1698 if((pw->p_flag&P_SIGNALLED) && pw->p_exit==SIGINT && !(shp->sigflag[SIGINT]&SH_SIGOFF)) in job_wait()
1701 else if((pw->p_flag&P_STOPPED) && pw->p_exit==SIGTSTP) in job_wait()
1710 if(pw->p_pid == tcgetpgrp(JOBTTY)) in job_wait()
1712 if(pw->p_pgrp==0) in job_wait()
1713 pw->p_pgrp = pw->p_pid; in job_wait()
1714 job_reset(pw); in job_wait()
1724 for(pw=job.pwlist; pw; pw=px) in job_wait()
1726 px = pw->p_nxtjob; in job_wait()
1727 job_unpost(pw,0); in job_wait()
1740 int job_switch(register struct process *pw,int bgflag) in job_switch() argument
1744 if(!pw || !(pw=job_byjid((int)pw->p_job))) in job_switch()
1751 for(; pw; pw=pw->p_nxtproc) in job_switch()
1752 pw->p_flag |= P_DISOWN; in job_switch()
1759 sfprintf(outfile,"[%d]\t",(int)pw->p_job); in job_switch()
1760 sh.bckpid = pw->p_pid; in job_switch()
1762 pw->p_flag |= P_BG; in job_switch()
1768 job_unlink(pw); in job_switch()
1769 pw->p_nxtjob = job.pwlist; in job_switch()
1770 job.pwlist = pw; in job_switch()
1773 hist_list(shgd->hist_ptr,outfile,pw->p_name,'&',";"); in job_switch()
1778 if(!(pw=job_unpost(pw,1))) in job_switch()
1784 pw->p_flag |= P_FG; in job_switch()
1786 pw->p_flag &= ~P_BG; in job_switch()
1788 job_wait(pw->p_pid); in job_switch()
1791 else if(pw->p_flag&P_STOPPED) in job_switch()
1792 job_unstop(pw); in job_switch()
1804 static void job_fgrp(register struct process *pw, int newgrp) in job_fgrp() argument
1806 for(; pw; pw=pw->p_nxtproc) in job_fgrp()
1807 pw->p_fgrp = newgrp; in job_fgrp()
1816 register struct process *pw; in job_unstop() local
1818 for(pw=px ;pw ;pw=pw->p_nxtproc) in job_unstop()
1820 if(pw->p_flag&P_STOPPED) in job_unstop()
1823 pw->p_flag &= ~(P_STOPPED|P_SIGNALLED|P_NOTIFY); in job_unstop()
1845 register struct process *pw; in job_unpost() local
1851 pwtop = pw = job_byjid((int)pwtop->p_job); in job_unpost()
1853 if(pw->p_flag&P_BG) in job_unpost()
1854 return(pw); in job_unpost()
1856 for(; pw && (pw->p_flag&P_DONE)&&(notify||!(pw->p_flag&P_NOTIFY)||pw->p_env); pw=pw->p_nxtproc); in job_unpost()
1857 if(pw) in job_unpost()
1858 return(pw); in job_unpost()
1863 for(pw=pwtop; pw; pw=pw->p_nxtproc) in job_unpost()
1865 if(pw && pw->p_exitval) in job_unpost()
1866 *pw->p_exitval = pw->p_exit; in job_unpost()
1868 if((pw->p_flag&P_EXITSAVE) || pw->p_pid==sh.spid) in job_unpost()
1872 if(jp = jobsave_create(pw->p_pid)) in job_unpost()
1874 jp->exitval = pw->p_exit; in job_unpost()
1875 if(pw->p_flag&P_SIGNALLED) in job_unpost()
1878 pw->p_flag &= ~P_EXITSAVE; in job_unpost()
1880 pw->p_flag &= ~P_DONE; in job_unpost()
1882 pw->p_nxtjob = freelist; in job_unpost()
1883 freelist = pw; in job_unpost()
1897 static void job_unlink(register struct process *pw) in job_unlink() argument
1900 if(pw==job.pwlist) in job_unlink()
1902 job.pwlist = pw->p_nxtjob; in job_unlink()
1907 if(px->p_nxtjob == pw) in job_unlink()
1909 px->p_nxtjob = pw->p_nxtjob; in job_unlink()
1929 register struct process *pw; in job_alloc() local
1932 if((pw=job_byjid(j))&& !job_unpost(pw,0)) in job_alloc()
2056 register struct process *pw, *px, *pwnext; in job_subrestore() local
2075 for(pw=job.pwlist; pw; pw=pwnext) in job_subrestore()
2077 pwnext = pw->p_nxtjob; in job_subrestore()
2078 if(pw->p_env != sh.curenv || pw->p_pid==sh.pipepid) in job_subrestore()
2080 for(px=pw; px; px=px->p_nxtproc) in job_subrestore()
2082 job_unpost(pw,0); in job_subrestore()