summaryrefslogtreecommitdiffstats
path: root/contrib/tcsh/sh.proc.h
blob: c526b2ef4121cc2c586610afe3e0aed0efb8f8a0 (plain)
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 */
OpenPOWER on IntegriCloud