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
|
/* $OpenBSD: machine.h,v 1.31 2020/08/26 16:21:28 kn Exp $ */
/*
* Top users/processes display for Unix
* Version 3
*
* Copyright (c) 1984, 1989, William LeFebvre, Rice University
* Copyright (c) 1989, 1990, 1992, William LeFebvre, Northwestern University
*
* 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.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR OR HIS EMPLOYER 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.
*/
/*
* This file defines the interface between top and the machine-dependent
* module. It is NOT machine dependent and should not need to be changed
* for any specific machine.
*/
/*
* the statics struct is filled in by machine_init
*/
struct statics {
char **procstate_names;
char **cpustate_names;
char **memory_names;
char **order_names;
};
/*
* the system_info struct is filled in by a machine dependent routine.
*/
struct system_info {
pid_t last_pid;
double load_avg[NUM_AVERAGES];
int p_total;
int p_active; /* number of procs considered
* "active" */
int *procstates;
int64_t *cpustates;
int *cpuonline;
int *memory;
};
/*
* cpu_states is an array of percentages * 10. For example, the (integer)
* value 105 is 10.5% (or .105).
*/
/*
* the process_select struct tells get_process_info what processes we
* are interested in seeing
*/
struct process_select {
int idle; /* show idle processes */
int system; /* show system processes */
int threads; /* show threads */
uid_t uid; /* only this uid (unless uid == -1) */
uid_t huid; /* hide this uid (unless huid == -1) */
pid_t pid; /* only this pid (unless pid == -1) */
int rtable; /* show routing tables */
int rtableid; /* only this rtable (unless rtableid == -1) */
int hrtableid; /* hide this rtable (unless hrtableid == -1) */
char *command;/* only this command (unless == NULL) */
};
/* prototypes */
extern int display_init(struct statics *);
/* machine.c */
extern int machine_init(struct statics *);
extern char *format_header(char *, char *);
extern void get_system_info(struct system_info *);
extern struct handle
*get_process_info(struct system_info *, struct process_select *,
int (*) (const void *, const void *));
extern void skip_processes(struct handle *, int);
extern char *format_next_process(struct handle *,
const char *(*)(uid_t, int), int, pid_t *);
extern uid_t proc_owner(pid_t);
extern struct kinfo_proc *getprocs(int, int, int *);
int getncpu(void);
int getncpuonline(void);
int getfscale(void);
|