forked from mariux64/mxq
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
mx_proc: Move process related function from mx_util to mx_proc
- Loading branch information
Showing
8 changed files
with
196 additions
and
168 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,6 +2,7 @@ mx_getopt.o | |
mx_flock.o | ||
mx_log.o | ||
mx_util.o | ||
mx_proc.o | ||
mxq_group.o | ||
mxqadmin.o | ||
mxqdump.o | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
#include <sys/types.h> | ||
#include <stdio.h> | ||
#include <errno.h> | ||
#include <assert.h> | ||
|
||
#include "mx_util.h" | ||
#include "mx_proc.h" | ||
|
||
static int _mx_proc_pid_stat_strscan(char *str, struct mx_proc_pid_stat *pps) | ||
{ | ||
size_t res = 0; | ||
char *p; | ||
char *s; | ||
|
||
pps->comm = NULL; | ||
|
||
s = str; | ||
|
||
res += mx_strscan_ll(&s, &(pps->pid)); | ||
|
||
p = strrchr(s, ')'); | ||
if (!p) | ||
return -(errno=EINVAL); | ||
|
||
*p = 0; | ||
s++; | ||
|
||
pps->comm = mx_strdup_forever(s); | ||
s = p + 2; | ||
|
||
pps->state = *s; | ||
res += !(*(s+1) == ' '); | ||
s += 2; | ||
|
||
res += mx_strscan_ll(&s, &(pps->ppid)); | ||
res += mx_strscan_ll(&s, &(pps->pgrp)); | ||
res += mx_strscan_ll(&s, &(pps->session)); | ||
res += mx_strscan_ll(&s, &(pps->tty_nr)); | ||
res += mx_strscan_ll(&s, &(pps->tpgid)); | ||
res += mx_strscan_ull(&s, &(pps->flags)); | ||
res += mx_strscan_ull(&s, &(pps->minflt)); | ||
res += mx_strscan_ull(&s, &(pps->cminflt)); | ||
res += mx_strscan_ull(&s, &(pps->majflt)); | ||
res += mx_strscan_ull(&s, &(pps->cmajflt)); | ||
res += mx_strscan_ull(&s, &(pps->utime)); | ||
res += mx_strscan_ull(&s, &(pps->stime)); | ||
res += mx_strscan_ll(&s, &(pps->cutime)); | ||
res += mx_strscan_ll(&s, &(pps->cstime)); | ||
res += mx_strscan_ll(&s, &(pps->priority)); | ||
res += mx_strscan_ll(&s, &(pps->nice)); | ||
res += mx_strscan_ll(&s, &(pps->num_threads)); | ||
res += mx_strscan_ll(&s, &(pps->itrealvalue)); | ||
res += mx_strscan_ull(&s, &(pps->starttime)); | ||
res += mx_strscan_ull(&s, &(pps->vsize)); | ||
res += mx_strscan_ll(&s, &(pps->rss)); | ||
res += mx_strscan_ull(&s, &(pps->rsslim)); | ||
res += mx_strscan_ull(&s, &(pps->startcode)); | ||
res += mx_strscan_ull(&s, &(pps->endcode)); | ||
res += mx_strscan_ull(&s, &(pps->startstack)); | ||
res += mx_strscan_ull(&s, &(pps->kstkesp)); | ||
res += mx_strscan_ull(&s, &(pps->kstkeip)); | ||
res += mx_strscan_ull(&s, &(pps->signal)); | ||
res += mx_strscan_ull(&s, &(pps->blocked)); | ||
res += mx_strscan_ull(&s, &(pps->sigignore)); | ||
res += mx_strscan_ull(&s, &(pps->sigcatch)); | ||
res += mx_strscan_ull(&s, &(pps->wchan)); | ||
res += mx_strscan_ull(&s, &(pps->nswap)); | ||
res += mx_strscan_ull(&s, &(pps->cnswap)); | ||
res += mx_strscan_ll(&s, &(pps->exit_signal)); | ||
res += mx_strscan_ll(&s, &(pps->processor)); | ||
res += mx_strscan_ull(&s, &(pps->rt_priority)); | ||
res += mx_strscan_ull(&s, &(pps->policy)); | ||
res += mx_strscan_ull(&s, &(pps->delayacct_blkio_ticks)); | ||
res += mx_strscan_ull(&s, &(pps->guest_time)); | ||
res += mx_strscan_ll(&s, &(pps->cguest_time)); | ||
|
||
if (res != 0) | ||
return -(errno=EINVAL); | ||
|
||
return 0; | ||
} | ||
|
||
int mx_proc_pid_stat(struct mx_proc_pid_stat **pps, pid_t pid) | ||
{ | ||
_mx_cleanup_free_ char *fname = NULL; | ||
_mx_cleanup_free_ char *line = NULL; | ||
int res; | ||
|
||
mx_asprintf_forever(&fname, "/proc/%d/stat", pid); | ||
|
||
if (!*pps) | ||
*pps = mx_calloc_forever(1, sizeof(**pps)); | ||
|
||
res = mx_read_first_line_from_file(fname, &line); | ||
if (res < 0) | ||
return res; | ||
|
||
res = _mx_proc_pid_stat_strscan(line, *pps); | ||
if (res < 0) | ||
return res; | ||
|
||
return 0; | ||
} | ||
|
||
void mx_proc_pid_stat_free_content(struct mx_proc_pid_stat *pps) | ||
{ | ||
if (!pps) | ||
return; | ||
|
||
mx_free_null(pps->comm); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
#ifndef __MX_PROC_H__ | ||
#define __MX_PROC_H__ 1 | ||
|
||
#include <sys/types.h> | ||
|
||
struct mx_proc_pid_stat { | ||
long long int pid; /* 1 */ | ||
char *comm; /* 2 (comm) */ | ||
char state; /* 3 "RSDZTW" */ | ||
long long int ppid; /* 4 */ | ||
long long int pgrp; /* 5 */ | ||
long long int session; /* 6 */ | ||
long long int tty_nr; /* 7 */ | ||
long long int tpgid; /* 8 */ | ||
unsigned long long int flags; /* 9 */ | ||
unsigned long long int minflt; /* 10 */ | ||
unsigned long long int cminflt; /* 11 */ | ||
unsigned long long int majflt; /* 12 */ | ||
unsigned long long int cmajflt; /* 13 */ | ||
unsigned long long int utime; /* 14 */ | ||
unsigned long long int stime; /* 15 */ | ||
long long int cutime; /* 16 */ | ||
long long int cstime; /* 17 */ | ||
long long int priority; /* 18 */ | ||
long long int nice; /* 19 */ | ||
long long int num_threads; /* 20 */ | ||
long long int itrealvalue; /* 21 */ | ||
unsigned long long int starttime; /* 22 */ | ||
unsigned long long int vsize; /* 23 */ | ||
long long int rss; /* 24 */ | ||
unsigned long long int rsslim; /* 25 */ | ||
unsigned long long int startcode; /* 26 */ | ||
unsigned long long int endcode; /* 27 */ | ||
unsigned long long int startstack; /* 28 */ | ||
unsigned long long int kstkesp; /* 29 */ | ||
unsigned long long int kstkeip; /* 30 */ | ||
unsigned long long int signal; /* 31 */ | ||
unsigned long long int blocked; /* 32 */ | ||
unsigned long long int sigignore; /* 33 */ | ||
unsigned long long int sigcatch; /* 34 */ | ||
unsigned long long int wchan; /* 35 */ | ||
unsigned long long int nswap; /* 36 */ | ||
unsigned long long int cnswap; /* 37 */ | ||
long long int exit_signal; /* 38 */ | ||
long long int processor; /* 39 */ | ||
unsigned long long int rt_priority; /* 40 */ | ||
unsigned long long int policy; /* 41 */ | ||
unsigned long long int delayacct_blkio_ticks; /* 42 */ | ||
unsigned long long int guest_time; /* 43 */ | ||
long long int cguest_time; /* 44 */ | ||
}; | ||
|
||
int mx_proc_pid_stat_read(struct mx_proc_pid_stat *pps, char *fmt, ...); | ||
int mx_proc_pid_stat(struct mx_proc_pid_stat **pps, pid_t pid); | ||
|
||
void mx_proc_pid_stat_free_content(struct mx_proc_pid_stat *pps); | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.