gpt4 book ai didi

c - 使用 pid linux 制作一个显示 CPU(%) 和内存使用率(kB) 的程序

转载 作者:太空狗 更新时间:2023-10-29 12:09:21 25 4
gpt4 key购买 nike

我正在尝试创建一个程序来获取 CPU(%) 和内存(kB) 使用情况以在 Ubuntu 终端上显示它。我一直在寻找可以显示它的命令,我找到了;

ps -p <pid> -o %cpu,%mem

当我直接在终端上测试它时,它工作得很好。但是在我的程序中它给了我这个错误: error: garbage option

这是我的代码:

#include <unistd.h>
#include<time.h>
#include <stdio.h>
#include <stdlib.h>
#include<string.h>

int main (int argc, char *argv[], char *envp[]) {
int pid ; /* Process ID */
char usage[150];
char kill[50];
pid = fork () ; /* Process reaplication */
sprintf(usage,"%s%d%s","ps -p ", pid, " %cpu,%mem");
sprintf(kill, "%s%d", "kill -9 ", pid);

if ( pid < 0 ) { /*if fork do not work*/
perror ("Erro: ") ;
exit (-1) ; /* Ends process with error: -1 */
} else if( pid > 0 ) { /* If i'm parent process*/
for(int i=0;i<10;i++) {
system("clear");
printf("Processing (%ds)\n", i);
int aux;
for(aux=i;aux>0;aux--) {
printf("=");
}
printf("=\n");
system(usage);
sleep(1);
}
system(kill);
} else /* senão, sou o processo filho (pid == 0) { */
if(strcmp(argv[1],"cpu")==0) { /* if argv[1] = cpu -> Execute code using intese cpu*/
for(;;){}
}
if(strcmp(argv[1],"cpu-mem")) { /* if argv[1] = cpu-mem -> Execute code using intese cpu and memory */
int moment = clock();
for (;;) {
while(clock() - moment < 5){} /* makes mem use less intense */
malloc(sizeof(1000));
}
}
}
perror ("Erro: ") ; /* if do not work */
printf ("Tchau !\n") ;
exit(0) ; /* Ends process with success (código 0) *
}

因此,我尝试将程序分为 10 个步骤。每个人都会执行命令。步骤之间间隔一秒

我怎样才能使这段代码起作用?我可以使用任何其他命令来替换这个命令吗?

最佳答案

已经解决了。我就是这样做的:

#include <unistd.h>
#include<time.h>
#include <stdio.h>
#include <stdlib.h>
#include<string.h>

int main (int argc, char *argv[], char *envp[]) {
int pid ; /* Process ID */
char mem_usage[50];
char cpu_usage[50];
char kill[50];
pid = fork () ; /* Process reaplication */
sprintf(cpu_usage,"%s%d%s","ps -p ", pid, " -o %cpu | grep -v %CPU");
sprintf(mem_usage, "%s%d%s", "pmap -x ", pid," | grep total | awk '{print $3}'");
sprintf(kill, "%s%d", "kill -9 ", pid);

if ( pid < 0 ) { /*if fork do not work*/
perror ("Erro: ") ;
exit (-1) ; /* Ends process with error: -1 */
}
else if( pid > 0 ) /* If i'm parent process*/
{
for(int i=0;i<10;i++)
{
system("clear");
if(i == 0 || i == 3 || i == 6 || i == 9)
{
printf("Processing.\n");
}
else if(i == 1 || i == 4 || i == 7)
{
printf("Processing..\n");
}
else if(i == 2 || i == 5 || i == 8)
{
printf("Processing...\n");
}
printf("%ds\n", i+1);
printf("================\n");
printf("CPU(%%)\n");
system(cpu_usage);
printf("MEM(kB)\n");
system(mem_usage);
sleep(1);
}
system(kill);
}
else /* senão, sou o processo filho (pid == 0) */
{
if(strcmp(argv[1],"cpu")==0) /* if argv[1] = cpu -> Execute code using intese cpu*/
{
for(;;){}
}
if(strcmp(argv[1],"cpu-mem")==0) /* if argv[1] = cpu-mem -> Execute code using intese cpu and memory */
{
int moment = clock();
for (;;) {
sleep(0.001); /* makes mem use less intense */
malloc(50* sizeof(int));
}
}

}
perror ("Erro: ") ; /* if do not work */

printf ("Tchau !\n") ;
exit(0) ; /* Ends process with success (código 0) */

}

我用过 ps -p <pid> -o %cpu | grep -v %CPU获取 CPU(%) 使用率。

计算内存(kB)使用量:pmap -x <pid> " | grep total | awk '{print $3}'"

在这种情况下,我使用了 awk '{print $3}'从 Comand pmap -x <pid> 打印第三列和 grep total只打印我需要的行。

有两种方式运行这段代码:

    1. ./filename cpu ---> 只会“强制”你的 CPU
    1. ./filename cpu-mem ---> 会使用你的 RAM,它可能会使你的电脑崩溃。

这是了解 CPU 和内存如何工作的很好的练习。

关于c - 使用 pid linux 制作一个显示 CPU(%) 和内存使用率(kB) 的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52634766/

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