some checks for /proc
This commit is contained in:
parent
00580471d5
commit
2d375e1f3f
|
@ -118,6 +118,9 @@ int sigar_os_open(sigar_t **sigar)
|
||||||
int ncpu;
|
int ncpu;
|
||||||
size_t len;
|
size_t len;
|
||||||
struct timeval boottime;
|
struct timeval boottime;
|
||||||
|
#ifndef DARWIN
|
||||||
|
struct stat sb;
|
||||||
|
#endif
|
||||||
|
|
||||||
len = sizeof(ncpu);
|
len = sizeof(ncpu);
|
||||||
mib[0] = CTL_HW;
|
mib[0] = CTL_HW;
|
||||||
|
@ -139,6 +142,12 @@ int sigar_os_open(sigar_t **sigar)
|
||||||
(*sigar)->mach_port = mach_host_self();
|
(*sigar)->mach_port = mach_host_self();
|
||||||
#else
|
#else
|
||||||
(*sigar)->kmem = kvm_open(NULL, NULL, NULL, O_RDONLY, "kvm_open");
|
(*sigar)->kmem = kvm_open(NULL, NULL, NULL, O_RDONLY, "kvm_open");
|
||||||
|
if (stat("/proc/curproc", &sb) < 0) {
|
||||||
|
(*sigar)->proc_mounted = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
(*sigar)->proc_mounted = 1;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
get_koffsets(*sigar);
|
get_koffsets(*sigar);
|
||||||
|
@ -170,6 +179,8 @@ char *sigar_os_error_string(int err)
|
||||||
switch (err) {
|
switch (err) {
|
||||||
case SIGAR_EPERM_KMEM:
|
case SIGAR_EPERM_KMEM:
|
||||||
return "Failed to open /dev/kmem for reading";
|
return "Failed to open /dev/kmem for reading";
|
||||||
|
case SIGAR_EPROC_NOENT:
|
||||||
|
return "/proc filesystem is not mounted";
|
||||||
default:
|
default:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -688,6 +699,9 @@ int sigar_proc_args_get(sigar_t *sigar, sigar_pid_t pid,
|
||||||
#ifdef DARWIN
|
#ifdef DARWIN
|
||||||
return SIGAR_ENOTIMPL;
|
return SIGAR_ENOTIMPL;
|
||||||
#else
|
#else
|
||||||
|
if (!sigar->proc_mounted) {
|
||||||
|
return SIGAR_EPROC_NOENT;
|
||||||
|
}
|
||||||
return sigar_procfs_args_get(sigar, pid, procargs);
|
return sigar_procfs_args_get(sigar, pid, procargs);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,9 +28,11 @@ struct sigar_t {
|
||||||
kvm_t *kmem;
|
kvm_t *kmem;
|
||||||
/* offsets for seeking on kmem */
|
/* offsets for seeking on kmem */
|
||||||
unsigned long koffsets[KOFFSET_MAX];
|
unsigned long koffsets[KOFFSET_MAX];
|
||||||
|
int proc_mounted;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#define SIGAR_EPERM_KMEM (SIGAR_OS_START_ERROR+1)
|
#define SIGAR_EPERM_KMEM (SIGAR_OS_START_ERROR+1)
|
||||||
|
#define SIGAR_EPROC_NOENT (SIGAR_OS_START_ERROR+2)
|
||||||
|
|
||||||
#endif /* SIGAR_OS_H */
|
#endif /* SIGAR_OS_H */
|
||||||
|
|
Loading…
Reference in New Issue