1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
/* $Header: /src/pub/tcsh/sh.proc.h,v 3.10 2002/03/08 17:36:46 christos Exp $ */
/*
* sh.proc.h: Process data structures and variables
*/
/*-
* Copyright (c) 1980, 1991 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndef _h_sh_proc
#define _h_sh_proc
/*
* C shell - process structure declarations
*/
/*
* Structure for each process the shell knows about:
* allocated and filled by pcreate.
* flushed by pflush; freeing always happens at top level
* so the interrupt level has less to worry about.
* processes are related to "friends" when in a pipeline;
* p_friends links makes a circular list of such jobs
*/
struct process {
struct process *p_next; /* next in global "proclist" */
struct process *p_friends; /* next in job list (or self) */
struct directory *p_cwd; /* cwd of the job (only in head) */
unsigned long p_flags; /* various job status flags */
unsigned char p_reason; /* reason for entering this state */
int p_index; /* shorthand job index */
pid_t p_procid;
pid_t p_jobid; /* pid of job leader */
/* if a job is stopped/background p_jobid gives its pgrp */
#ifdef BSDTIMES
struct timeval p_btime; /* begin time */
struct timeval p_etime; /* end time */
struct sysrusage p_rusage;
#else /* BSDTIMES */
# ifdef _SEQUENT_
timeval_t p_btime; /* begin time */
timeval_t p_etime; /* end time */
struct process_stats p_rusage;
# else /* _SEQUENT_ */
# ifndef POSIX
time_t p_btime; /* begin time */
time_t p_etime; /* end time */
time_t p_utime; /* user time */
time_t p_stime; /* system time */
# else /* POSIX */
clock_t p_btime; /* begin time */
clock_t p_etime; /* end time */
clock_t p_utime; /* user time */
clock_t p_stime; /* system time */
# endif /* POSIX */
# endif /* _SEQUENT_ */
#endif /* BSDTIMES */
Char *p_command; /* first PMAXLEN chars of command */
};
/* flag values for p_flags */
#define PRUNNING (1<<0) /* running */
#define PSTOPPED (1<<1) /* stopped */
#define PNEXITED (1<<2) /* normally exited */
#define PAEXITED (1<<3) /* abnormally exited */
#define PSIGNALED (1<<4) /* terminated by a signal != SIGINT */
#define PALLSTATES (PRUNNING|PSTOPPED|PNEXITED|PAEXITED| \
PSIGNALED|PINTERRUPTED)
#define PNOTIFY (1<<5) /* notify async when done */
#define PTIME (1<<6) /* job times should be printed */
#define PAWAITED (1<<7) /* top level is waiting for it */
#define PFOREGND (1<<8) /* started in shells pgrp */
#define PDUMPED (1<<9) /* process dumped core */
#define PDIAG (1<<10) /* diagnostic output also piped out */
#define PPOU (1<<11) /* piped output */
#define PREPORTED (1<<12) /* status has been reported */
#define PINTERRUPTED (1<<13) /* job stopped via interrupt signal */
#define PPTIME (1<<14) /* time individual process */
#define PNEEDNOTE (1<<15) /* notify as soon as practical */
#define PBACKQ (1<<16) /* Process is `` evaluation */
#define PHUP (1<<17) /* Process is marked for SIGHUP on exit */
#define PMAXLEN 80
/* defines for arguments to pprint */
#define NUMBER 01
#define NAME 02
#define REASON 04
#define AMPERSAND 010
#define FANCY 020
#define SHELLDIR 040 /* print shell's dir if not the same */
#define JOBDIR 0100 /* print job's dir if not the same */
#define AREASON 0200
EXTERN struct process proclist IZERO_STRUCT;/* list head of all processes */
EXTERN bool pnoprocesses IZERO; /* pchild found nothing to wait for */
EXTERN struct process *pholdjob IZERO; /* one level stack of current jobs */
EXTERN struct process *pcurrjob IZERO; /* current job */
EXTERN struct process *pcurrent IZERO; /* current job in table */
EXTERN struct process *pprevious IZERO; /* previous job in table */
EXTERN int pmaxindex IZERO; /* current maximum job index */
#ifndef BSDTIMES
EXTERN bool timesdone; /* shtimes buffer full ? */
#endif /* BSDTIMES */
#endif /* _h_sh_proc */
|