mirror of
https://github.com/troglobit/finit.git
synced 2026-10-01 05:22:48 +07:00
initctl: show cgroup cpu.shares and memory.usage in ps command
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
+54
-2
@@ -723,6 +723,53 @@ static char *pid_comm(int pid, char *buf, size_t len)
|
||||
return chomp(buf);
|
||||
}
|
||||
|
||||
static uint64_t cgroup_uint64(char *path, char *file)
|
||||
{
|
||||
uint64_t val = 0;
|
||||
char buf[42];
|
||||
FILE *fp;
|
||||
|
||||
fp = fopenf("r", "%s/%s", path, file);
|
||||
if (!fp)
|
||||
return val;
|
||||
|
||||
if (fgets(buf, sizeof(buf), fp))
|
||||
val = strtoull(buf, NULL, 10);
|
||||
fclose(fp);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
static int cgroup_shares(char *path)
|
||||
{
|
||||
return (int)cgroup_uint64(path, "cpu.shares");
|
||||
}
|
||||
|
||||
static char *cgroup_memuse(char *path)
|
||||
{
|
||||
static char buf[32];
|
||||
int gb, mb, kb, b;
|
||||
uint64_t num;
|
||||
|
||||
num = cgroup_uint64(path, "memory.usage_in_bytes");
|
||||
|
||||
gb = num / (1024 * 1024 * 1024);
|
||||
num = num % (1024 * 1024 * 1024);
|
||||
mb = num / (1024 * 1024);
|
||||
num = num % (1024 * 1024);
|
||||
kb = num / (1024);
|
||||
b = num % (1024);
|
||||
|
||||
if (gb)
|
||||
snprintf(buf, sizeof(buf), "%d.%dG", gb, mb / 102);
|
||||
else if (mb)
|
||||
snprintf(buf, sizeof(buf), "%d.%dM", mb, kb / 102);
|
||||
else
|
||||
snprintf(buf, sizeof(buf), "%d.%dk", kb, b / 102);
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
static int cgroup_filter(const struct dirent *entry)
|
||||
{
|
||||
/* Skip current dir ".", and prev dir "..", from list of files */
|
||||
@@ -739,6 +786,9 @@ static int cgroup_filter(const struct dirent *entry)
|
||||
return 1;
|
||||
}
|
||||
|
||||
#define CDIM (plain ? "" : "\e[2m")
|
||||
#define CRST (plain ? "" : "\e[0m")
|
||||
|
||||
static int dump_cgroup(char *path, char *pfx)
|
||||
{
|
||||
struct dirent **namelist = NULL;
|
||||
@@ -784,7 +834,7 @@ static int dump_cgroup(char *path, char *pfx)
|
||||
printf("%s%s ", pfx, FORK);
|
||||
snprintf(dir, sizeof(dir), "%s%s ", pfx, PIPE);
|
||||
}
|
||||
puts(nm);
|
||||
printf("%s/ [cpu.shares: %d mem.usage: %s]\n", nm, cgroup_shares(buf), cgroup_memuse(buf));
|
||||
|
||||
rc += dump_cgroup(buf, dir);
|
||||
|
||||
@@ -809,7 +859,9 @@ static int dump_cgroup(char *path, char *pfx)
|
||||
/* skip kernel threads for now */
|
||||
pid_comm(pid, comm, sizeof(comm));
|
||||
if (pid_cmdline(pid, buf, sizeof(buf)))
|
||||
printf("%s%s %d %s %s\n", pfx, ++i == num ? END : FORK, pid, comm, buf);
|
||||
printf("%s%s %s%d %s %s%s\n",
|
||||
pfx, ++i == num ? END : FORK,
|
||||
CDIM, pid, comm, buf, CRST);
|
||||
}
|
||||
|
||||
return fclose(fp);
|
||||
|
||||
Reference in New Issue
Block a user