dmake: do not set MAKEFLAGS=k
[unleashed/tickless.git] / usr / src / lib / libshell / common / include / jobs.h
blob4ed087f0a774626c91c93090a1059f217b47c024
1 /***********************************************************************
2 * *
3 * This software is part of the ast package *
4 * Copyright (c) 1982-2010 AT&T Intellectual Property *
5 * and is licensed under the *
6 * Common Public License, Version 1.0 *
7 * by AT&T Intellectual Property *
8 * *
9 * A copy of the License is available at *
10 * http://www.opensource.org/licenses/cpl1.0.txt *
11 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
12 * *
13 * Information and Software Systems Research *
14 * AT&T Research *
15 * Florham Park NJ *
16 * *
17 * David Korn <dgk@research.att.com> *
18 * *
19 ***********************************************************************/
20 #pragma prototyped
21 #ifndef JOB_NFLAG
23 * Interface to job control for shell
24 * written by David Korn
28 #define JOBTTY 2
30 #include <ast.h>
31 #include <sfio.h>
32 #ifndef SIGINT
33 # include <signal.h>
34 #endif /* !SIGINT */
35 #include "FEATURE/options"
37 #undef JOBS
38 #if defined(SIGCLD) && !defined(SIGCHLD)
39 # define SIGCHLD SIGCLD
40 #endif
41 #ifdef SIGCHLD
42 # define JOBS 1
43 # include "terminal.h"
44 # ifdef FIOLOOKLD
45 /* Ninth edition */
46 extern int tty_ld, ntty_ld;
47 # define OTTYDISC tty_ld
48 # define NTTYDISC ntty_ld
49 # endif /* FIOLOOKLD */
50 #else
51 # undef SIGTSTP
52 # undef SH_MONITOR
53 # define SH_MONITOR 0
54 # define job_set(x)
55 # define job_reset(x)
56 #endif
58 struct process
60 struct process *p_nxtjob; /* next job structure */
61 struct process *p_nxtproc; /* next process in current job */
62 pid_t p_pid; /* process id */
63 pid_t p_pgrp; /* process group */
64 pid_t p_fgrp; /* process group when stopped */
65 short p_job; /* job number of process */
66 unsigned short p_exit; /* exit value or signal number */
67 unsigned short p_exitmin; /* minimum exit value for xargs */
68 unsigned short p_flag; /* flags - see below */
69 int p_env; /* subshell environment number */
70 #ifdef JOBS
71 off_t p_name; /* history file offset for command */
72 struct termios p_stty; /* terminal state for job */
73 #endif /* JOBS */
76 struct jobs
78 struct process *pwlist; /* head of process list */
79 pid_t curpgid; /* current process gid id */
80 pid_t parent; /* set by fork() */
81 pid_t mypid; /* process id of shell */
82 pid_t mypgid; /* process group id of shell */
83 pid_t mytgid; /* terminal group id of shell */
84 unsigned int in_critical; /* >0 => in critical region */
85 int savesig; /* active signal */
86 int numpost; /* number of posted jobs */
87 #ifdef SHOPT_BGX
88 int numbjob; /* number of background jobs */
89 #endif /* SHOPT_BGX */
90 short fd; /* tty descriptor number */
91 #ifdef JOBS
92 int suspend; /* suspend character */
93 int linedisc; /* line dicipline */
94 #endif /* JOBS */
95 char jobcontrol; /* turned on for real job control */
96 char waitsafe; /* wait will not block */
97 char waitall; /* wait for all jobs in pipe */
98 char toclear; /* job table needs clearing */
99 unsigned char *freejobs; /* free jobs numbers */
102 /* flags for joblist */
103 #define JOB_LFLAG 1
104 #define JOB_NFLAG 2
105 #define JOB_PFLAG 4
106 #define JOB_NLFLAG 8
108 extern struct jobs job;
110 #ifdef JOBS
112 #if !_std_malloc
113 #include <vmalloc.h>
114 #if VMALLOC_VERSION >= 20070911L
115 #define vmbusy() (vmstat(0,0)!=0)
116 #endif
117 #endif
118 #ifndef vmbusy
119 #define vmbusy() 0
120 #endif
122 #define job_lock() (job.in_critical++)
123 #define job_unlock() \
124 do { \
125 int sig; \
126 if (!--job.in_critical && (sig = job.savesig)) \
128 if (!job.in_critical++ && !vmbusy()) \
129 job_reap(sig); \
130 job.in_critical--; \
132 } while(0)
134 extern const char e_jobusage[];
135 extern const char e_done[];
136 extern const char e_running[];
137 extern const char e_coredump[];
138 extern const char e_no_proc[];
139 extern const char e_no_job[];
140 extern const char e_jobsrunning[];
141 extern const char e_nlspace[];
142 extern const char e_access[];
143 extern const char e_terminate[];
144 extern const char e_no_jctl[];
145 extern const char e_signo[];
146 #ifdef SIGTSTP
147 extern const char e_no_start[];
148 #endif /* SIGTSTP */
149 #ifdef NTTYDISC
150 extern const char e_newtty[];
151 extern const char e_oldtty[];
152 #endif /* NTTYDISC */
153 #endif /* JOBS */
156 * The following are defined in jobs.c
159 extern void job_clear(void);
160 extern void job_bwait(char**);
161 extern int job_walk(Sfio_t*,int(*)(struct process*,int),int,char*[]);
162 extern int job_kill(struct process*,int);
163 extern int job_wait(pid_t);
164 extern int job_post(pid_t,pid_t);
165 extern void *job_subsave(void);
166 extern void job_subrestore(void*);
167 #ifdef SHOPT_BGX
168 extern void job_chldtrap(Shell_t*, const char*,int);
169 #endif /* SHOPT_BGX */
170 #ifdef JOBS
171 extern void job_init(Shell_t*,int);
172 extern int job_close(Shell_t*);
173 extern int job_list(struct process*,int);
174 extern int job_terminate(struct process*,int);
175 extern int job_switch(struct process*,int);
176 extern void job_fork(pid_t);
177 extern int job_reap(int);
178 #else
179 # define job_init(s,flag)
180 # define job_close(s) (0)
181 # define job_fork(p)
182 #endif /* JOBS */
185 #endif /* !JOB_NFLAG */