• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10/ksh-23/ksh/src/cmd/ksh93/sh/

Lines Matching refs:pw

185 #   define job_unstop(pw)
200 register struct process *pw,*pwnext;
207 for(pw=job.pwlist;pw;pw=pwnext)
209 pwnext = pw->p_nxtjob;
210 if((pw->p_flag&(P_BG|P_DONE)) != (P_BG|P_DONE))
212 pw->p_flag &= ~P_BG;
215 shp->bckpid = pw->p_pid;
216 shp->savexit = pw->p_exit;
217 if(pw->p_flag&P_SIGNALLED)
220 if(pw->p_pid==bckpid && unpost)
221 job_unpost(pw,0);
286 struct process *pw,*pwnext;
307 for(n=0,pw=job.pwlist; pw; pw=pwnext)
309 pwnext = pw->p_nxtjob;
310 if((cp && val==pw->p_pid) || (pw->p_cojob && pw->p_cojob->local==(void*)csp))
314 if(pw->p_flag&P_DONE)
316 r |= (*fun)(pw,arg);
319 job_wait(-pw->p_pid);
340 register struct process *pw;
351 for(pw=job.pwlist;pw;pw=pw->p_nxtjob)
353 if(pw->p_cojob && !(pw->p_flag&P_DONE))
356 cojobs = (pw!=0);
433 if(!(pw=job_bypid(pid)))
436 sfprintf(sfstderr,"ksh: job line %4d: reap pid=%d critical=%d unknown job pid=%d pw=%x\n",__LINE__,getpid(),job.in_critical,pid,pw);
440 pw = &dummy;
441 pw->p_exit = 0;
442 pw->p_pgrp = 0;
443 pw->p_exitmin = 0;
447 pw->p_flag = 0;
448 lastpid = pw->p_pid = pid;
458 px=job_byjid(pw->p_job);
460 pw->p_flag &= ~(P_NOTIFY|P_SIGNALLED|P_STOPPED);
463 pw->p_flag |= (P_NOTIFY|P_SIGNALLED|P_STOPPED);
464 pw->p_exit = WSTOPSIG(wstat);
465 if(pw->p_pgrp && pw->p_pgrp==job.curpgid && sh_isstate(SH_STOPOK))
466 kill(getpid(),pw->p_exit);
490 pw->p_flag &= ~(P_STOPPED|P_SIGNALLED);
493 pw->p_flag |= (P_DONE|P_NOTIFY|P_SIGNALLED);
495 pw->p_flag |= P_COREDUMP;
496 pw->p_exit = WTERMSIG(wstat);
500 if(pw->p_pgrp && pw->p_pgrp==job.curpgid && pw->p_exit==SIGINT && sh_isstate(SH_STOPOK))
502 pw->p_flag &= ~P_NOTIFY;
510 pw->p_flag |= (P_DONE|P_NOTIFY);
511 pw->p_exit = pw->p_exitmin;
512 if(WEXITSTATUS(wstat) > pw->p_exitmin)
513 pw->p_exit = WEXITSTATUS(wstat);
516 if((pw->p_flag&P_DONE) && (pw->p_flag&P_BG))
528 pw->p_flag &= ~P_BG;
531 if(pw->p_pgrp==0)
532 pw->p_flag &= ~P_NOTIFY;
534 if(jp && pw== &dummy)
536 jp->exitval = pw->p_exit;
537 if(pw->p_flag&P_SIGNALLED)
541 sfprintf(sfstderr,"ksh: job line %4d: reap pid=%d critical=%d job %d with pid %d flags=%o complete with status=%x exit=%d\n",__LINE__,getpid(),job.in_critical,pw->p_job,pid,pw->p_flag,wstat,pw->p_exit);
545 if(px && pw != px)
546 pw->p_flag &= ~P_NOTIFY;
547 if(pid==pw->p_fgrp && pid==tcgetpgrp(JOBTTY))
549 px = job_byjid((int)pw->p_job);
574 job_list(pw,JOB_NFLAG|JOB_NLFLAG);
575 job_unpost(pw,1);
748 register struct process *pw;
759 for(pw=job.pwlist;pw;pw=pw->p_nxtjob)
761 if(!(pw->p_flag&P_STOPPED))
763 if(!(pw->p_flag&P_DONE))
768 killpg(pw->p_pgrp,SIGTERM);
823 static void job_set(register struct process *pw)
825 Shell_t *shp = pw->p_shp;
828 if(pw->p_flag&P_STTY)
831 tty_set(job.fd,TCSAFLUSH,&pw->p_stty);
834 if((pw->p_flag&P_STOPPED) || tcgetpgrp(job.fd) == shp->gd->pid)
835 tcsetpgrp(job.fd,pw->p_fgrp);
838 job_unstop(pw);
843 static void job_reset(register struct process *pw)
847 job_fgrp(pw,tcgetpgrp(job.fd));
852 if(!(pw->p_flag&P_FG))
854 if(pw && (pw->p_flag&P_SIGNALLED) && pw->p_exit!=SIGHUP)
856 if(tty_get(job.fd,&pw->p_stty) == 0)
857 pw->p_flag |= P_STTY;
872 register struct process *pw;
882 pw = job_bystring(jp);
884 if(pw)
885 pid = pw->p_pid;
910 register struct process *pw;
918 pw = job.pwlist;
925 for(;pw;pw=px)
927 px = pw->p_nxtjob;
928 if(pw->p_env != sh.jobenv)
930 if((*fun)(pw,arg))
937 while(pw && (pw->p_env!=sh.jobenv || pw->p_pgrp==0))
938 pw = pw->p_nxtjob;
939 if((*fun)(pw,arg))
957 pw = job_bystring(jobid);
961 if(!(pw = job_bypid(pid)))
963 pw = &dummy;
964 pw->p_shp = sh_getinterp();
965 pw->p_pid = pid;
966 pw->p_pgrp = pid;
970 if((*fun)(pw,arg))
981 int job_terminate(register struct process *pw,register int sig)
983 if(pw->p_pgrp && !(pw->p_flag&P_DISOWN))
984 job_kill(pw,sig);
995 int job_list(struct process *pw,register int flag)
998 register struct process *px = pw;
1002 if(!pw || pw->p_job<=0)
1004 if(pw->p_env != shp->jobenv)
1072 hist_list(shgd->hist_ptr,outfile,pw->p_name,0,";");
1087 register struct process *pw=job.pwlist;
1089 if(*ajob++ != '%' || !pw)
1093 pw = job_byjid((int)strtol(ajob, (char**)0, 10));
1098 if(pw)
1099 pw = job.pwlist->p_nxtjob;
1102 pw = job_byname(ajob);
1103 if(pw && pw->p_flag)
1104 return(pw);
1112 int job_kill(register struct process *pw,register int sig)
1114 Shell_t *shp = pw->p_shp;
1125 if(pw==0)
1127 pid = pw->p_pid;
1129 if(pw->p_cojob)
1130 r = cokill(pw->p_cojob->coshell,pw->p_cojob,sig);
1150 if(pw->p_flag&P_STOPPED)
1151 pw->p_flag &= ~(P_STOPPED|P_SIGNALLED);
1160 job_unstop(job_bypid(pw->p_pid));
1175 if(pid = pw->p_pgrp)
1180 job_unstop(pw);
1185 while(pw && pw->p_pgrp==0 && (r=kill(pw->p_pid,sig))>=0)
1189 kill(pw->p_pid,SIGCONT);
1191 pw = pw->p_nxtproc;
1197 if(pw && by_number)
1218 register struct process *pw = job.pwlist;
1227 for(;pw;pw=pw->p_nxtjob)
1229 if(hist_match(shgd->hist_ptr,pw->p_name,cp,flag)>=0)
1233 pz = pw;
1253 register struct process *pw, *px;
1258 for(pw=job.pwlist; pw; pw=pwnext)
1260 pwnext = pw->p_nxtjob;
1261 while(px=pw)
1263 pw = pw->p_nxtproc;
1297 register struct process *pw;
1321 if(pw = job_bypid(pid))
1322 job_unpost(pw,0);
1325 if(pw=job_bypid(join))
1326 val = pw->p_job;
1330 if(val && (pw=job_byjid(val)) != job.pwlist)
1332 job_unlink(pw);
1333 pw->p_nxtjob = job.pwlist;
1334 job.pwlist = pw;
1337 if(pw=freelist)
1338 freelist = pw->p_nxtjob;
1340 pw = new_of(struct process,0);
1341 pw->p_flag = 0;
1346 pw->p_nxtjob = job.pwlist->p_nxtjob;
1347 pw->p_nxtproc = job.pwlist;
1348 pw->p_job = job.pwlist->p_job;
1353 while((pw->p_job = job_alloc()) < 0)
1355 pw->p_nxtjob = job.pwlist;
1356 pw->p_nxtproc = 0;
1358 pw->p_exitval = job.exitval;
1360 pw->p_cojob = 0;
1363 pw->p_cojob = ((struct cosh*)shp->coshell)->cojob;
1367 job.pwlist = pw;
1368 pw->p_shp = shp;
1369 pw->p_env = shp->curenv;
1370 pw->p_pid = pid;
1372 pw->p_flag = P_EXITSAVE;
1373 pw->p_exitmin = shp->xargexit;
1374 pw->p_exit = 0;
1379 pw->p_fgrp = job.curpgid;
1382 pw->p_fgrp = 0;
1383 pw->p_pgrp = pw->p_fgrp;
1385 sfprintf(sfstderr,"ksh: job line %4d: post pid=%d critical=%d job=%d pid=%d pgid=%d savesig=%d join=%d\n",__LINE__,getpid(),job.in_critical,pw->p_job,
1386 pw->p_pid,pw->p_pgrp,job.savesig,join);
1391 pw->p_name=hist_tell(shgd->hist_ptr,(int)hp->histind-1);
1393 pw->p_name = -1;
1397 pw->p_exit = val;
1398 if(pw->p_exit==SH_STOPSIG)
1400 pw->p_flag |= (P_SIGNALLED|P_STOPPED);
1401 pw->p_exit = 0;
1403 else if(pw->p_exit >= SH_EXITSIG)
1405 pw->p_flag |= P_DONE|P_SIGNALLED;
1406 pw->p_exit &= SH_EXITMASK;
1409 pw->p_flag |= (P_DONE|P_NOTIFY);
1414 if(pw->p_flag&P_DONE)
1417 pw->p_flag |= P_BG;
1422 return(pw->p_job);
1431 register struct process *pw, *px;
1432 for(pw=job.pwlist; pw; pw=pw->p_nxtjob)
1433 for(px=pw; px; px=px->p_nxtproc)
1447 register struct process *pw;
1448 for(pw=job.pwlist;pw; pw = pw->p_nxtjob)
1450 if(pw->p_job==jobid)
1453 return(pw);
1459 static void job_prmsg(register struct process *pw)
1461 if(pw->p_exit!=SIGINT && pw->p_exit!=SIGPIPE)
1464 msg = job_sigmsg((int)(pw->p_exit));
1466 if(pw->p_flag&P_COREDUMP)
1473 errormsg(SH_DICT,2,"%d: %s%s",pw->p_pid,msg,dump);
1488 register struct process *pw=0,*px;
1500 if(!job.waitall || !job.curjobid || !(pw = job_byjid(job.curjobid)))
1505 jobid = pw->p_job;
1507 if(!(pw->p_flag&(P_DONE|P_STOPPED)))
1514 if(!(pw=job_bypid(pid)))
1523 else if(intr && pw->p_env!=shp->curenv)
1529 jobid = pw->p_job;
1531 pw->p_flag &= ~P_EXITSAVE;
1532 if(pw->p_pgrp && job.parent!= (pid_t)-1)
1535 pwfg = pw;
1538 if(pw)
1539 sfprintf(sfstderr,"ksh: job line %4d: wait pid=%d critical=%d flags=%o\n",__LINE__,getpid(),job.in_critical,pw->p_flag);
1554 if(px!=pw && (px->p_flag&P_NOTIFY))
1570 if(pw && (pw->p_flag&(P_DONE|P_STOPPED)))
1573 if(pw->p_flag&P_STOPPED)
1575 pw->p_flag |= P_EXITSAVE;
1578 if( pw->p_exit!=SIGTTIN && pw->p_exit!=SIGTTOU)
1581 killpg(pw->p_pgrp,SIGCONT);
1584 pw->p_flag &= ~(P_NOTIFY|P_SIGNALLED|P_STOPPED|P_EXITSAVE);
1589 if(pw->p_flag&P_SIGNALLED)
1591 pw->p_flag &= ~P_NOTIFY;
1592 job_prmsg(pw);
1594 else if(pw->p_flag&P_DONE)
1595 pw->p_flag &= ~P_NOTIFY;
1596 if(pw->p_job==jobid)
1600 if(px!=pw)
1611 px = job_unpost(pw,1);
1614 pw = px;
1639 if(pw->p_pgrp)
1641 job_reset(pw);
1643 if((pw->p_flag&P_SIGNALLED) && pw->p_exit==SIGINT && !(shp->sigflag[SIGINT]&SH_SIGOFF))
1646 else if((pw->p_flag&P_STOPPED) && pw->p_exit==SIGTSTP)
1655 if(pw->p_pid == tcgetpgrp(JOBTTY))
1657 if(pw->p_pgrp==0)
1658 pw->p_pgrp = pw->p_pid;
1659 job_reset(pw);
1669 for(pw=job.pwlist; pw; pw=px)
1671 px = pw->p_nxtjob;
1672 job_unpost(pw,0);
1685 int job_switch(register struct process *pw,int bgflag)
1689 if(!pw || !(pw=job_byjid((int)pw->p_job)))
1696 for(; pw; pw=pw->p_nxtproc)
1697 pw->p_flag |= P_DISOWN;
1704 sfprintf(outfile,"[%d]\t",(int)pw->p_job);
1705 sh.bckpid = pw->p_pid;
1707 pw->p_flag |= P_BG;
1713 job_unlink(pw);
1714 pw->p_nxtjob = job.pwlist;
1715 job.pwlist = pw;
1718 hist_list(shgd->hist_ptr,outfile,pw->p_name,'&',";");
1723 if(!(pw=job_unpost(pw,1)))
1729 pw->p_flag |= P_FG;
1731 pw->p_flag &= ~P_BG;
1733 job_wait(pw->p_pid);
1736 else if(pw->p_flag&P_STOPPED)
1737 job_unstop(pw);
1749 static void job_fgrp(register struct process *pw, int newgrp)
1751 for(; pw; pw=pw->p_nxtproc)
1752 pw->p_fgrp = newgrp;
1761 register struct process *pw;
1763 for(pw=px ;pw ;pw=pw->p_nxtproc)
1765 if(pw->p_flag&P_STOPPED)
1768 pw->p_flag &= ~(P_STOPPED|P_SIGNALLED|P_NOTIFY);
1790 register struct process *pw;
1796 pwtop = pw = job_byjid((int)pwtop->p_job);
1798 if(pw->p_flag&P_BG)
1799 return(pw);
1801 for(; pw && (pw->p_flag&P_DONE)&&(notify||!(pw->p_flag&P_NOTIFY)||pw->p_env); pw=pw->p_nxtproc);
1802 if(pw)
1803 return(pw);
1808 for(pw=pwtop; pw; pw=pw->p_nxtproc)
1810 if(pw && pw->p_exitval)
1811 *pw->p_exitval = pw->p_exit;
1813 if((pw->p_flag&P_EXITSAVE) || pw->p_pid==sh.spid)
1817 if(jp = jobsave_create(pw->p_pid))
1819 jp->exitval = pw->p_exit;
1820 if(pw->p_flag&P_SIGNALLED)
1823 pw->p_flag &= ~P_EXITSAVE;
1825 pw->p_flag &= ~P_DONE;
1827 pw->p_nxtjob = freelist;
1828 freelist = pw;
1842 static void job_unlink(register struct process *pw)
1845 if(pw==job.pwlist)
1847 job.pwlist = pw->p_nxtjob;
1852 if(px->p_nxtjob == pw)
1854 px->p_nxtjob = pw->p_nxtjob;
1874 register struct process *pw;
1877 if((pw=job_byjid(j))&& !job_unpost(pw,0))
2000 register struct process *pw, *px, *pwnext;
2016 for(pw=job.pwlist; pw; pw=pwnext)
2018 pwnext = pw->p_nxtjob;
2019 if(pw->p_env != sh.curenv || pw->p_pid==sh.pipepid)
2021 for(px=pw; px; px=px->p_nxtproc)
2023 job_unpost(pw,0);