Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
htop
Commits
fd5dd660
Commit
fd5dd660
authored
Nov 02, 2015
by
Hisham Muhammad
Browse files
Merge pull request #299 from mmcco/master
OpenBSD port updates and error exit improvements
parents
b669540e
cd3d2337
Changes
3
Hide whitespace changes
Inline
Side-by-side
darwin/DarwinProcessList.c
View file @
fd5dd660
...
...
@@ -41,14 +41,14 @@ void ProcessList_getHostInfo(host_basic_info_data_t *p) {
mach_msg_type_number_t
info_size
=
HOST_BASIC_INFO_COUNT
;
if
(
0
!=
host_info
(
mach_host_self
(),
HOST_BASIC_INFO
,
(
host_info_t
)
p
,
&
info_size
))
{
err
(
2
,
"Unable to retrieve host info
\n
"
);
CRT_fatalError
(
"Unable to retrieve host info
\n
"
);
}
}
void
ProcessList_freeCPULoadInfo
(
processor_cpu_load_info_t
*
p
)
{
if
(
NULL
!=
p
&&
NULL
!=
*
p
)
{
if
(
0
!=
munmap
(
*
p
,
vm_page_size
))
{
err
(
8
,
"Unable to free old CPU load information
\n
"
);
CRT_fatalError
(
"Unable to free old CPU load information
\n
"
);
}
}
...
...
@@ -61,7 +61,7 @@ unsigned ProcessList_allocateCPULoadInfo(processor_cpu_load_info_t *p) {
// TODO Improving the accuracy of the load counts woule help a lot.
if
(
0
!=
host_processor_info
(
mach_host_self
(),
PROCESSOR_CPU_LOAD_INFO
,
&
cpu_count
,
(
processor_info_array_t
*
)
p
,
&
info_size
))
{
err
(
4
,
"Unable to retrieve CPU info
\n
"
);
CRT_fatalError
(
"Unable to retrieve CPU info
\n
"
);
}
return
cpu_count
;
...
...
@@ -71,7 +71,7 @@ void ProcessList_getVMStats(vm_statistics64_t p) {
mach_msg_type_number_t
info_size
=
HOST_VM_INFO64_COUNT
;
if
(
host_statistics64
(
mach_host_self
(),
HOST_VM_INFO64
,
(
host_info_t
)
p
,
&
info_size
)
!=
0
)
err
(
9
,
"Unable to retrieve VM statistics
\n
"
);
CRT_fatalError
(
"Unable to retrieve VM statistics
\n
"
);
}
struct
kinfo_proc
*
ProcessList_getKInfoProcs
(
size_t
*
count
)
{
...
...
@@ -84,14 +84,14 @@ struct kinfo_proc *ProcessList_getKInfoProcs(size_t *count) {
*/
*
count
=
0
;
if
(
sysctl
(
mib
,
4
,
NULL
,
count
,
NULL
,
0
)
<
0
)
err
(
5
,
"Unable to get size of kproc_infos"
);
CRT_fatalError
(
"Unable to get size of kproc_infos"
);
processes
=
malloc
(
*
count
);
if
(
processes
==
NULL
)
errx
(
6
,
"Out of memory for kproc_infos"
);
CRT_fatalError
(
"Out of memory for kproc_infos"
);
if
(
sysctl
(
mib
,
4
,
processes
,
count
,
NULL
,
0
)
<
0
)
err
(
7
,
"Unable to get kinfo_procs"
);
CRT_fatalError
(
"Unable to get kinfo_procs"
);
*
count
=
*
count
/
sizeof
(
struct
kinfo_proc
);
...
...
openbsd/OpenBSDProcessList.c
View file @
fd5dd660
...
...
@@ -13,7 +13,6 @@ in the source distribution for its full text.
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <err.h>
#include <sys/types.h>
#include <sys/param.h>
#include <sys/proc.h>
...
...
@@ -52,7 +51,7 @@ ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList, ui
OpenBSDProcessList
*
fpl
=
calloc
(
1
,
sizeof
(
OpenBSDProcessList
));
ProcessList
*
pl
=
(
ProcessList
*
)
fpl
;
size_t
size
=
sizeof
(
pl
->
cpuCount
);
ProcessList_init
(
pl
,
Class
(
OpenBSDProcess
),
usersTable
,
pidWhiteList
,
userId
);
pl
->
cpuCount
=
1
;
// default to 1 on sysctl() error
(
void
)
sysctl
(
mib
,
2
,
&
pl
->
cpuCount
,
&
size
,
NULL
,
0
);
...
...
@@ -60,13 +59,13 @@ ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList, ui
size
=
sizeof
(
fscale
);
if
(
sysctl
(
fmib
,
2
,
&
fscale
,
&
size
,
NULL
,
0
)
<
0
)
err
(
1
,
"fscale sysctl call failed"
);
CRT_fatalError
(
"fscale sysctl call failed"
);
for
(
i
=
0
;
i
<
pl
->
cpuCount
;
i
++
)
{
fpl
->
cpus
[
i
].
totalTime
=
1
;
fpl
->
cpus
[
i
].
totalPeriod
=
1
;
}
pageSizeKb
=
PAGE_SIZE_KB
;
// XXX: last arg should eventually be an errbuf
...
...
@@ -79,7 +78,7 @@ ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList, ui
void
ProcessList_delete
(
ProcessList
*
this
)
{
const
OpenBSDProcessList
*
fpl
=
(
OpenBSDProcessList
*
)
this
;
if
(
fpl
->
kd
)
kvm_close
(
fpl
->
kd
);
ProcessList_done
(
this
);
free
(
this
);
}
...
...
@@ -90,7 +89,7 @@ static inline void OpenBSDProcessList_scanMemoryInfo(ProcessList* pl) {
size_t
size
=
sizeof
(
uvmexp
);
if
(
sysctl
(
uvmexp_mib
,
2
,
&
uvmexp
,
&
size
,
NULL
,
0
)
<
0
)
{
err
(
1
,
"uvmexp sysctl call failed"
);
CRT_fatalError
(
"uvmexp sysctl call failed"
);
}
//kb_pagesize = uvmexp.pagesize / 1024;
...
...
@@ -99,7 +98,7 @@ static inline void OpenBSDProcessList_scanMemoryInfo(ProcessList* pl) {
/*
const OpenBSDProcessList* fpl = (OpenBSDProcessList*) pl;
size_t len = sizeof(pl->totalMem);
sysctl(MIB_hw_physmem, 2, &(pl->totalMem), &len, NULL, 0);
pl->totalMem /= 1024;
...
...
@@ -108,7 +107,7 @@ static inline void OpenBSDProcessList_scanMemoryInfo(ProcessList* pl) {
pl->freeMem = pl->totalMem - pl->usedMem;
sysctl(MIB_vm_stats_vm_v_cache_count, 4, &(pl->cachedMem), &len, NULL, 0);
pl->cachedMem *= pageSizeKb;
struct kvm_swap swap[16];
int nswap = kvm_getswapinfo(fpl->kd, swap, sizeof(swap)/sizeof(swap[0]), 0);
pl->totalSwap = 0;
...
...
@@ -119,7 +118,7 @@ static inline void OpenBSDProcessList_scanMemoryInfo(ProcessList* pl) {
}
pl->totalSwap *= pageSizeKb;
pl->usedSwap *= pageSizeKb;
pl->sharedMem = 0; // currently unused
pl->buffersMem = 0; // not exposed to userspace
*/
...
...
@@ -133,11 +132,11 @@ char *OpenBSDProcessList_readProcessName(kvm_t* kd, struct kinfo_proc* kproc, in
argv
=
kvm_getargv
(
kd
,
kproc
,
500
);
if
(
argv
==
NULL
)
err
(
1
,
"kvm call failed"
);
CRT_fatalError
(
"kvm call failed"
);
str
=
buf
=
malloc
(
len
+
1
);
if
(
str
==
NULL
)
err
(
1
,
"out of memory"
);
CRT_fatalError
(
"out of memory"
);
while
(
*
argv
!=
NULL
)
{
cpsz
=
MIN
(
len
,
strlen
(
*
argv
));
...
...
@@ -179,23 +178,23 @@ void ProcessList_goThroughEntries(ProcessList* this) {
OpenBSDProcess
*
fp
;
int
count
=
0
;
int
i
;
OpenBSDProcessList_scanMemoryInfo
(
this
);
// use KERN_PROC_KTHREAD to also include kernel threads
struct
kinfo_proc
*
kprocs
=
kvm_getprocs
(
fpl
->
kd
,
KERN_PROC_ALL
,
0
,
sizeof
(
struct
kinfo_proc
),
&
count
);
//struct kinfo_proc* kprocs = getprocs(KERN_PROC_ALL, 0, &count);
for
(
i
=
0
;
i
<
count
;
i
++
)
{
kproc
=
&
kprocs
[
i
];
preExisting
=
false
;
proc
=
ProcessList_getProcess
(
this
,
kproc
->
p_pid
,
&
preExisting
,
(
Process_New
)
OpenBSDProcess_new
);
fp
=
(
OpenBSDProcess
*
)
proc
;
proc
->
show
=
!
((
hideKernelThreads
&&
Process_isKernelThread
(
proc
))
||
(
hideUserlandThreads
&&
Process_isUserlandThread
(
proc
)));
if
(
!
preExisting
)
{
proc
->
ppid
=
kproc
->
p_ppid
;
proc
->
tpgid
=
kproc
->
p_tpgid
;
...
...
@@ -240,7 +239,7 @@ void ProcessList_goThroughEntries(ProcessList* this) {
if
(
Process_isKernelThread
(
proc
))
{
this
->
kernelThreads
++
;
}
this
->
totalTasks
++
;
// SRUN ('R') means runnable, not running
if
(
proc
->
state
==
'P'
)
{
...
...
openbsd/Platform.c
View file @
fd5dd660
...
...
@@ -38,6 +38,7 @@ in the source distribution for its full text.
/*{
#include "Action.h"
#include "BatteryMeter.h"
#include "SignalsPanel.h"
extern ProcessFieldData Process_fields[];
...
...
@@ -167,7 +168,7 @@ int Platform_getUptime() {
struct
timeval
bootTime
,
currTime
;
int
mib
[
2
]
=
{
CTL_KERN
,
KERN_BOOTTIME
};
size_t
size
=
sizeof
(
bootTime
);
int
err
=
sysctl
(
mib
,
2
,
&
bootTime
,
&
size
,
NULL
,
0
);
if
(
err
)
{
return
-
1
;
...
...
@@ -181,7 +182,7 @@ void Platform_getLoadAverage(double* one, double* five, double* fifteen) {
struct
loadavg
loadAverage
;
int
mib
[
2
]
=
{
CTL_VM
,
VM_LOADAVG
};
size_t
size
=
sizeof
(
loadAverage
);
int
err
=
sysctl
(
mib
,
2
,
&
loadAverage
,
&
size
,
NULL
,
0
);
if
(
err
)
{
*
one
=
0
;
...
...
@@ -210,8 +211,7 @@ double Platform_setCPUValues(Meter* this, int cpu) {
size_t
size
=
sizeof
(
double
)
*
CPUSTATES
;
int
mib
[]
=
{
CTL_KERN
,
KERN_CPTIME2
,
cpu
-
1
};
if
(
sysctl
(
mib
,
3
,
new_v
,
&
size
,
NULL
,
0
)
==
-
1
)
{
puts
(
"err!"
);
//return 0.;
return
0
.;
}
// XXX: why?
...
...
@@ -232,7 +232,7 @@ double Platform_setCPUValues(Meter* this, int cpu) {
if
(
perc
<=
100
.
&&
perc
>=
0
.)
{
return
perc
;
}
else
{
return
12
.
34
;
return
0
.
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment