gpt4 book ai didi

通过niceness改变所有进程的niceness

转载 作者:行者123 更新时间:2023-11-30 17:10:47 24 4
gpt4 key购买 nike

我使用的是 Debian,有没有办法根据所有正在运行的进程当前的良好程度来更改其良好程度?例如,将所有当前正在运行的、niceness 为 -20 或 -19 的进程更改为 -10。 Renice 可以更改流程以及某些用户的流程。但据我所知,根据目前的情况,它无法做到这一点。

我正在尝试以 -20 的良好度运行一个程序,以尝试绕过一些似乎半定期发生的计时峰值。这些可能是由某些具有相同优先级的进程占用资源引起的。我希望通过一些漂亮的摆弄来检查这一点。

最佳答案

从 C 语言开始:

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <stdlib.h>
#include <string.h>

static char *prstatname(char *buf, char **endptr)
{
/* parse process name */
char *ptr = buf;
while (*ptr && *ptr != '(') ++ptr;
++ptr;
if (!ptr) return 0;

char *name = ptr;
while (*ptr)
{
if (*ptr == ')' && *(ptr+1) && *(ptr+2) && *(ptr+3)
&& *(ptr+1) == ' ' && *(ptr+3) == ' ')
{
*ptr = 0;
*endptr = ptr + 1;
return name;
}
++ptr;
}
return 0;
}

int main(void)
{
DIR *proc = opendir("/proc");
if (!proc) return 1;

struct dirent *ent;

while ((ent = readdir(proc)))
{
/* check whether filename is all numeric, then it's a process id */
char *endptr;
int pid = strtol(ent->d_name, &endptr, 10);
if (*endptr) continue;

/* combine to '/proc/{pid}/stat' to get information about process */
char statname[64] = {0,};
strcat(statname, "/proc/");
strncat(statname, ent->d_name, 52);
strcat(statname, "/stat");

FILE *pstat = fopen(statname, "r");
if (!pstat) continue;

/* try to read process info */
char buf[1024];
if (!fgets(buf, 1024, pstat))
{
fclose(pstat);
continue;
}
fclose(pstat);

char *name = prstatname(buf, &endptr);
if (!name) continue;

/* nice value is in the 17th field after process name */
int i;
char *tok = strtok(endptr, " ");
for (i = 0; tok && i < 16; ++i) tok = strtok(0, " ");
if (!tok || i < 16) continue;

int nice = strtol(tok, &endptr, 10);
if (*endptr) continue;

printf("[%d] %s -- nice: %d\n", pid, name, nice);
}
}

如果您了解此程序,您可以轻松修改它以执行您想要的操作。

关于通过niceness改变所有进程的niceness,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32724946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com