move /proc/pid/cmdline parsing to sigar_util.c
This commit is contained in:
parent
734e766771
commit
b2cc0c4c48
|
@ -62,6 +62,10 @@ int sigar_proc_fd_count(sigar_t *sigar, sigar_pid_t pid,
|
||||||
|
|
||||||
int sigar_proc_count(sigar_t *sigar, sigar_uint64_t *total);
|
int sigar_proc_count(sigar_t *sigar, sigar_uint64_t *total);
|
||||||
|
|
||||||
|
/* linux + freebsd */
|
||||||
|
int sigar_procfs_args_get(sigar_t *sigar, sigar_pid_t pid,
|
||||||
|
sigar_proc_args_t *procargs);
|
||||||
|
|
||||||
int sigar_mem_calc_ram(sigar_t *sigar, sigar_mem_t *mem);
|
int sigar_mem_calc_ram(sigar_t *sigar, sigar_mem_t *mem);
|
||||||
|
|
||||||
double sigar_file_system_usage_calc_used(sigar_t *sigar,
|
double sigar_file_system_usage_calc_used(sigar_t *sigar,
|
||||||
|
|
|
@ -717,66 +717,7 @@ int sigar_proc_state_get(sigar_t *sigar, sigar_pid_t pid,
|
||||||
int sigar_proc_args_get(sigar_t *sigar, sigar_pid_t pid,
|
int sigar_proc_args_get(sigar_t *sigar, sigar_pid_t pid,
|
||||||
sigar_proc_args_t *procargs)
|
sigar_proc_args_t *procargs)
|
||||||
{
|
{
|
||||||
char buffer[BUFSIZ], *buf=NULL, *ptr;
|
return sigar_procfs_args_get(sigar, pid, procargs);
|
||||||
int fd, len, total=0;
|
|
||||||
|
|
||||||
(void)SIGAR_PROC_FILENAME(buffer, pid, "/cmdline");
|
|
||||||
|
|
||||||
if ((fd = open(buffer, O_RDONLY)) < 0) {
|
|
||||||
if (errno == ENOENT) {
|
|
||||||
return ESRCH;
|
|
||||||
}
|
|
||||||
return errno;
|
|
||||||
}
|
|
||||||
|
|
||||||
buffer[0] = '\0';
|
|
||||||
|
|
||||||
/* XXX: possible to get rid of some mallocs here.
|
|
||||||
* but, unlikely this will be called often so it
|
|
||||||
* might not even matter much.
|
|
||||||
*/
|
|
||||||
while ((len = read(fd, buffer, sizeof(buffer)-1)) > 0) {
|
|
||||||
if (len == 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (buf) {
|
|
||||||
buf = realloc(buf, total+len);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
buf = malloc(len+1);
|
|
||||||
}
|
|
||||||
memcpy(buf+total, buffer, len);
|
|
||||||
total += len;
|
|
||||||
}
|
|
||||||
|
|
||||||
close(fd);
|
|
||||||
|
|
||||||
sigar_proc_args_create(procargs);
|
|
||||||
|
|
||||||
//e.g. /proc/2/cmdline
|
|
||||||
if (total == 0) {
|
|
||||||
procargs->number = 0;
|
|
||||||
return SIGAR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
buf[total] = '\0';
|
|
||||||
ptr = buf;
|
|
||||||
|
|
||||||
while (*ptr) {
|
|
||||||
int alen = strlen(ptr)+1;
|
|
||||||
char *arg = malloc(alen);
|
|
||||||
|
|
||||||
SIGAR_PROC_ARGS_GROW(procargs);
|
|
||||||
memcpy(arg, ptr, alen);
|
|
||||||
|
|
||||||
procargs->data[procargs->number++] = arg;
|
|
||||||
|
|
||||||
ptr += alen;
|
|
||||||
}
|
|
||||||
|
|
||||||
free(buf);
|
|
||||||
|
|
||||||
return SIGAR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int sigar_proc_env_get(sigar_t *sigar, sigar_pid_t pid,
|
int sigar_proc_env_get(sigar_t *sigar, sigar_pid_t pid,
|
||||||
|
|
|
@ -221,6 +221,71 @@ int sigar_proc_count(sigar_t *sigar, sigar_uint64_t *total)
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int sigar_procfs_args_get(sigar_t *sigar, sigar_pid_t pid,
|
||||||
|
sigar_proc_args_t *procargs)
|
||||||
|
{
|
||||||
|
char buffer[9086], *buf=NULL, *ptr;
|
||||||
|
int fd, len, total=0;
|
||||||
|
|
||||||
|
(void)SIGAR_PROC_FILENAME(buffer, pid, "/cmdline");
|
||||||
|
|
||||||
|
if ((fd = open(buffer, O_RDONLY)) < 0) {
|
||||||
|
if (errno == ENOENT) {
|
||||||
|
return ESRCH;
|
||||||
|
}
|
||||||
|
return errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer[0] = '\0';
|
||||||
|
|
||||||
|
/* XXX: possible to get rid of some mallocs here.
|
||||||
|
* but, unlikely this will be called often so it
|
||||||
|
* might not even matter much.
|
||||||
|
*/
|
||||||
|
while ((len = read(fd, buffer, sizeof(buffer)-1)) > 0) {
|
||||||
|
if (len == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (buf) {
|
||||||
|
buf = realloc(buf, total+len);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
buf = malloc(len+1);
|
||||||
|
}
|
||||||
|
memcpy(buf+total, buffer, len);
|
||||||
|
total += len;
|
||||||
|
}
|
||||||
|
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
sigar_proc_args_create(procargs);
|
||||||
|
|
||||||
|
//e.g. /proc/2/cmdline
|
||||||
|
if (total == 0) {
|
||||||
|
procargs->number = 0;
|
||||||
|
return SIGAR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
buf[total] = '\0';
|
||||||
|
ptr = buf;
|
||||||
|
|
||||||
|
while (*ptr) {
|
||||||
|
int alen = strlen(ptr)+1;
|
||||||
|
char *arg = malloc(alen);
|
||||||
|
|
||||||
|
SIGAR_PROC_ARGS_GROW(procargs);
|
||||||
|
memcpy(arg, ptr, alen);
|
||||||
|
|
||||||
|
procargs->data[procargs->number++] = arg;
|
||||||
|
|
||||||
|
ptr += alen;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(buf);
|
||||||
|
|
||||||
|
return SIGAR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
int sigar_mem_calc_ram(sigar_t *sigar, sigar_mem_t *mem)
|
int sigar_mem_calc_ram(sigar_t *sigar, sigar_mem_t *mem)
|
||||||
{
|
{
|
||||||
sigar_uint64_t lram = (mem->total / (1024 * 1024));
|
sigar_uint64_t lram = (mem->total / (1024 * 1024));
|
||||||
|
|
Loading…
Reference in New Issue