|
|
1.1 root 1: /* sh.proc.h 4.4 2/9/83 */
2:
3: /*
4: * C shell - process structure declarations
5: */
6:
7: /*
8: * Structure for each process the shell knows about:
9: * allocated and filled by pcreate.
10: * flushed by pflush; freeing always happens at top level
11: * so the interrupt level has less to worry about.
12: * processes are related to "friends" when in a pipeline;
13: * p_friends links makes a circular list of such jobs
14: */
15: struct process {
16: struct process *p_next; /* next in global "proclist" */
17: struct process *p_friends; /* next in job list (or self) */
18: struct directory *p_cwd; /* cwd of the job (only in head) */
19: short unsigned p_flags; /* various job status flags */
20: char p_reason; /* reason for entering this state */
21: char p_index; /* shorthand job index */
22: int p_pid;
23: int p_jobid; /* pid of job leader */
24: /* if a job is stopped/background p_jobid gives its pgrp */
25: struct timeval p_btime; /* begin time */
26: struct timeval p_etime; /* end time */
27: struct rusage p_rusage;
28: long p_utime; /* XXX */
29: long p_stime; /* XXX */
30: char *p_command; /* first PMAXLEN chars of command */
31: };
32:
33: /* flag values for p_flags */
34: #define PRUNNING (1<<0) /* running */
35: #define PSTOPPED (1<<1) /* stopped */
36: #define PNEXITED (1<<2) /* normally exited */
37: #define PAEXITED (1<<3) /* abnormally exited */
38: #define PSIGNALED (1<<4) /* terminated by a signal != SIGINT */
39:
40: #define PALLSTATES (PRUNNING|PSTOPPED|PNEXITED|PAEXITED|PSIGNALED|PINTERRUPTED)
41: #define PNOTIFY (1<<5) /* notify async when done */
42: #define PTIME (1<<6) /* job times should be printed */
43: #define PAWAITED (1<<7) /* top level is waiting for it */
44: #define PFOREGND (1<<8) /* started in shells pgrp */
45: #define PDUMPED (1<<9) /* process dumped core */
46: #define PDIAG (1<<10) /* diagnostic output also piped out */
47: #define PPOU (1<<11) /* piped output */
48: #define PREPORTED (1<<12) /* status has been reported */
49: #define PINTERRUPTED (1<<13) /* job stopped via interrupt signal */
50: #define PPTIME (1<<14) /* time individual process */
51: #define PNEEDNOTE (1<<15) /* notify as soon as practical */
52:
53: #define PNULL (struct process *)0
54: #define PMAXLEN 80
55:
56: /* defines for arguments to pprint */
57: #define NUMBER 01
58: #define NAME 02
59: #define REASON 04
60: #define AMPERSAND 010
61: #define FANCY 020
62: #define SHELLDIR 040 /* print shell's dir if not the same */
63: #define JOBDIR 0100 /* print job's dir if not the same */
64: #define AREASON 0200
65:
66: struct process proclist; /* list head of all processes */
67: bool pnoprocesses; /* pchild found nothing to wait for */
68:
69: struct process *pholdjob; /* one level stack of current jobs */
70:
71: struct process *pcurrjob; /* current job */
72: struct process *pcurrent; /* current job in table */
73: struct process *pprevious; /* previous job in table */
74:
75: short pmaxindex; /* current maximum job index */
76:
77: bool timesdone; /* shtimes buffer full ? */
78:
79: int psigint();
80: struct process *pgetcurr();
81: struct process *plookup();
82: struct process *pfind();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.