1 0 stevel /* 2 356 muffin * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 3 0 stevel * Use is subject to license terms. 4 0 stevel */ 5 0 stevel 6 0 stevel /* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */ 7 0 stevel /* All Rights Reserved */ 8 0 stevel 9 0 stevel /* 10 0 stevel * Copyright (c) 1980 Regents of the University of California. 11 0 stevel * All rights reserved. The Berkeley Software License Agreement 12 0 stevel * specifies the terms and conditions for redistribution. 13 0 stevel */ 14 0 stevel 15 0 stevel #pragma ident "%Z%%M% %I% %E% SMI" 16 0 stevel 17 0 stevel /* 18 0 stevel * C shell - process structure declarations 19 0 stevel */ 20 0 stevel 21 0 stevel /* 22 0 stevel * Structure for each process the shell knows about: 23 0 stevel * allocated and filled by pcreate. 24 0 stevel * flushed by pflush; freeing always happens at top level 25 0 stevel * so the interrupt level has less to worry about. 26 0 stevel * processes are related to "friends" when in a pipeline; 27 0 stevel * p_friends links makes a circular list of such jobs 28 0 stevel */ 29 0 stevel struct process { 30 0 stevel struct process *p_next; /* next in global "proclist" */ 31 0 stevel struct process *p_friends; /* next in job list (or self) */ 32 0 stevel struct directory *p_cwd; /* cwd of the job (only in head) */ 33 0 stevel short unsigned p_flags; /* various job status flags */ 34 0 stevel tchar p_reason; /* reason for entering this state */ 35 0 stevel tchar p_index; /* shorthand job index */ 36 0 stevel int p_pid; 37 0 stevel int p_jobid; /* pid of job leader */ 38 0 stevel /* if a job is stopped/background p_jobid gives its pgrp */ 39 0 stevel struct timeval p_btime; /* begin time */ 40 0 stevel struct timeval p_etime; /* end time */ 41 0 stevel struct rusage p_rusage; 42 0 stevel tchar *p_command; /* first PMAXLEN chars of command */ 43 0 stevel }; 44 0 stevel 45 0 stevel /* added for status */ 46 0 stevel #define ABN_TERM 0200 47 0 stevel 48 0 stevel /* flag values for p_flags */ 49 0 stevel #define PRUNNING (1<<0) /* running */ 50 0 stevel #define PSTOPPED (1<<1) /* stopped */ 51 0 stevel #define PNEXITED (1<<2) /* normally exited */ 52 0 stevel #define PAEXITED (1<<3) /* abnormally exited */ 53 0 stevel #define PSIGNALED (1<<4) /* terminated by a signal != SIGINT */ 54 0 stevel 55 0 stevel #define PALLSTATES (PRUNNING|PSTOPPED|PNEXITED|PAEXITED|PSIGNALED|PINTERRUPTED) 56 0 stevel #define PNOTIFY (1<<5) /* notify async when done */ 57 0 stevel #define PTIME (1<<6) /* job times should be printed */ 58 0 stevel #define PAWAITED (1<<7) /* top level is waiting for it */ 59 0 stevel #define PFOREGND (1<<8) /* started in shells pgrp */ 60 0 stevel #define PDUMPED (1<<9) /* process dumped core */ 61 0 stevel #define PDIAG (1<<10) /* diagnostic output also piped out */ 62 0 stevel #define PPOU (1<<11) /* piped output */ 63 0 stevel #define PREPORTED (1<<12) /* status has been reported */ 64 0 stevel #define PINTERRUPTED (1<<13) /* job stopped via interrupt signal */ 65 0 stevel #define PPTIME (1<<14) /* time individual process */ 66 0 stevel #define PNEEDNOTE (1<<15) /* notify as soon as practical */ 67 0 stevel 68 0 stevel #define PNULL (struct process *)0 69 0 stevel #define PMAXLEN 80 70 0 stevel 71 0 stevel /* defines for arguments to pprint */ 72 0 stevel #define NUMBER 01 73 0 stevel #define NAME 02 74 0 stevel #define REASON 04 75 0 stevel #define AMPERSAND 010 76 0 stevel #define FANCY 020 77 0 stevel #define SHELLDIR 040 /* print shell's dir if not the same */ 78 0 stevel #define JOBDIR 0100 /* print job's dir if not the same */ 79 0 stevel #define AREASON 0200 80 0 stevel 81 0 stevel struct process proclist; /* list head of all processes */ 82 0 stevel bool pnoprocesses; /* pchild found nothing to wait for */ 83 0 stevel 84 0 stevel struct process *pholdjob; /* one level stack of current jobs */ 85 0 stevel 86 0 stevel struct process *pcurrjob; /* current job */ 87 0 stevel struct process *pcurrent; /* current job in table */ 88 0 stevel struct process *pprevious; /* previous job in table */ 89 0 stevel 90 0 stevel short pmaxindex; /* current maximum job index */ 91