Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/cmd/std/pss.h
1808 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1989-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* *
19
***********************************************************************/
20
#pragma prototyped
21
/*
22
* Glenn Fowler
23
* AT&T Research
24
*
25
* process status stream interface definitions
26
*/
27
28
#ifndef _PSS_H
29
#define _PSS_H 1
30
31
#include <ast.h>
32
33
#define PSS_VERSION 20101201L
34
35
#define PSS_ALL (1<<0) /* match all */
36
#define PSS_ATTACHED (1<<1) /* match attached */
37
#define PSS_DETACHED (1<<2) /* match detached */
38
#define PSS_LEADER (1<<3) /* match group leaders */
39
#define PSS_NOLEADER (1<<4) /* no group leaders */
40
#define PSS_PS (1<<5) /* force the ps method */
41
#define PSS_TTY (1<<6) /* match disc.tty */
42
#define PSS_UID (1<<7) /* match disc.uid */
43
#define PSS_UNMATCHED (1<<8) /* return unmatched too */
44
#define PSS_VERBOSE (1<<9) /* report all errors */
45
46
#define PSS_ANCESTOR (1<<0) /* ancestor matched */
47
#define PSS_CHILD (1<<1) /* on children chain */
48
#define PSS_EXPLICIT (1<<2) /* explicit */
49
#define PSS_MATCHED (1<<3) /* matched */
50
#define PSS_PARENT (1<<4) /* on parent chain */
51
52
#define PSS_FLAGS 0xff
53
#define PSS_NODEV ((Pss_dev_t)(-1))
54
#define PSS_SCAN 0
55
#define PSS_ZOMBIE 'Z'
56
57
#define PSS_addr (1<<0)
58
#define PSS_args (1<<1)
59
#define PSS_command (1<<2)
60
#define PSS_cpu (1<<3)
61
#define PSS_flags (1<<4)
62
#define PSS_gid (1<<5)
63
#define PSS_job (1<<6)
64
#define PSS_nice (1<<7)
65
#define PSS_npid (1<<8)
66
#define PSS_pgrp (1<<9)
67
#define PSS_pid (1<<10)
68
#define PSS_ppid (1<<11)
69
#define PSS_pri (1<<12)
70
#define PSS_proc (1<<13)
71
#define PSS_refcount (1<<14)
72
#define PSS_rss (1L<<15)
73
#define PSS_sched (1L<<16)
74
#define PSS_sid (1L<<17)
75
#define PSS_size (1L<<18)
76
#define PSS_start (1L<<19)
77
#define PSS_state (1L<<20)
78
#define PSS_tgrp (1L<<21)
79
#define PSS_time (1L<<22)
80
#define PSS_tty (1L<<23)
81
#define PSS_uid (1L<<24)
82
#define PSS_wchan (1L<<25)
83
84
#define PSS_all (PSS_addr|PSS_args|PSS_command|PSS_cpu|PSS_flags|\
85
PSS_gid|PSS_job|PSS_nice|PSS_npid|PSS_pgrp|PSS_pid|\
86
PSS_ppid|PSS_pri|PSS_proc|PSS_refcount|PSS_rss|\
87
PSS_sched|PSS_sid|PSS_size|PSS_start|PSS_state|\
88
PSS_tgrp|PSS_time|PSS_tty|PSS_uid|PSS_wchan)
89
#define PSS_match (PSS_gid|PSS_pgrp|PSS_sid|PSS_tty|PSS_uid)
90
91
#undef hz /* who gets the prize for this? */
92
93
typedef long Pss_dev_t;
94
typedef long Pss_id_t;
95
96
struct Pss_s; typedef struct Pss_s Pss_t;
97
98
typedef struct Pssent_s
99
{
100
int pss;
101
102
void* addr;
103
void* wchan;
104
105
char* args;
106
char* command;
107
char* sched;
108
char* ttyname;
109
110
Pss_dev_t tty;
111
112
size_t rss;
113
size_t size;
114
115
time_t start;
116
117
unsigned long time;
118
119
Pss_id_t job;
120
Pss_id_t npid;
121
Pss_id_t pid;
122
Pss_id_t pgrp;
123
Pss_id_t ppid;
124
Pss_id_t sid;
125
Pss_id_t tgrp;
126
127
Pss_id_t gid;
128
Pss_id_t uid;
129
130
long nice;
131
long pri;
132
133
int cpu;
134
int flags;
135
int proc;
136
int refcount;
137
int state;
138
} Pssent_t;
139
140
typedef struct Pssdata_s
141
{
142
struct Pssdata_s* next;
143
unsigned long data;
144
} Pssdata_t;
145
146
typedef struct Pssmatch_s
147
{
148
struct Pssmatch_s* next;
149
unsigned long field;
150
struct Pssdata_s* data;
151
} Pssmatch_t;
152
153
typedef struct Pssdisc_s
154
{
155
unsigned long version; /* interface version */
156
unsigned long fields; /* PSS_[a-z]* field requests */
157
unsigned long flags; /* PSS_[A-Z]* flags */
158
char* command; /* caller command path */
159
Pss_dev_t tty; /* PSS_TTY match value */
160
Pss_id_t uid; /* PSS_UID match value */
161
Pssmatch_t* match; /* match these fields */
162
Error_f errorf; /* error function */
163
} Pssdisc_t;
164
165
typedef struct Pssmeth_s
166
{
167
const char* name; /* method name */
168
const char* usage; /* method usage */
169
unsigned long fields; /* supported fields */
170
int (*initf)(Pss_t*);
171
int (*readf)(Pss_t*, Pss_id_t);
172
int (*partf)(Pss_t*, Pssent_t*);
173
int (*fullf)(Pss_t*, Pssent_t*);
174
Pss_dev_t (*ttydevf)(Pss_t*, const char*);
175
char* (*ttynamef)(Pss_t*, Pssent_t*);
176
Pss_dev_t (*ttymapf)(Pss_t*, Pss_dev_t);
177
int (*donef)(Pss_t*);
178
} Pssmeth_t;
179
180
struct Pss_s
181
{
182
const char* id; /* library id string */
183
Pssmeth_t* meth; /* method */
184
185
#ifdef _PSS_PRIVATE_
186
_PSS_PRIVATE_
187
#endif
188
189
};
190
191
#define pssinit(d,c,e) (memset(d,0,sizeof(*(d))),(d)->version=PSS_VERSION,(d)->command=(char*)(c),(d)->errorf=(Error_f)(e))
192
193
extern Pss_t* pssopen(Pssdisc_t*);
194
extern Pssent_t* pssread(Pss_t*, Pss_id_t);
195
extern Pssent_t* psssave(Pss_t*, Pssent_t*);
196
extern int pssclose(Pss_t*);
197
198
extern int pssttyadd(Pss_t*, const char*, Pss_dev_t);
199
extern Pss_dev_t pssttydev(Pss_t*, const char*);
200
extern char* pssttyname(Pss_t*, Pssent_t*);
201
202
#endif
203
204