gpt4 book ai didi

c - 一个跟踪 CPU 时间和内存使用情况的 Linux shell

转载 作者:行者123 更新时间:2023-11-30 18:06:57 26 4
gpt4 key购买 nike

我正在尝试做的事情的简短摘要:

模拟一个 shell 程序,当用户在自己的进程中输入命令时执行命令,并且在每个进程完成后,输出所有子进程和 shell 在 CPU 上花费的总时间,以及最大内存量使用了单个进程。

创建 shell 并执行命令不是问题,但跟踪进程的统计信息却让我陷入困境。

为了跟踪 CPU 时间,我将使用 time 系统调用并将用户的命令通过 shell 传递到 time 中,以便进程可以完成运行,并且在执行结束时我将获得 time 的信息可供我使用。但是,当涉及到获取 shell(当前程序)在 CPU 上花费的时间时,我不完全确定该怎么做,因为我见过或遇到的每个时间实现都使用上述传递时间的方法命令和参数进入时间,但我无法使用 shell 做到这一点。我目前唯一的想法是让 shell 也成为一个子进程,运行一段时间,当 shell 完成运行子进程时,重新启动 shell,从 time 中提取信息,然后重新启动 shell。这看起来很绕,但我找不到任何系统调用来执行我想要的操作。

关于内存使用情况,我本来想用top,然后把信息拉出来,但是iirc top只监控当前内存使用情况,而不是总量。我唯一能想到的另一件事就是进入/proc//并尝试从那里的某个地方提取信息。这又显得非常迂回。

任何朝着正确方向的插入都会很棒。所有这些都是用 C 语言完成的,如果这有什么不同的话。

最佳答案

一种可能的方法是将每个用户命令作为单独的进程运行,并在进程完成时获取资源使用信息。好的,将命令作为进程运行非常简单(请参阅 fork() 和 exec* 系列)。资源使用情况(时间、内存等)怎么样?我建议看一下 getrusage() 系统调用。

男人说:

The getrusage() function shall provide measures of the resources used by the current process or its terminated and waited-for child processes. If the value of the who argument is RUSAGE_SELF, information shall be returned about resources used by the current process. If the value of the who argument is RUSAGE_CHILDREN, information shall be returned about resources used by the terminated and waited-for children of the current process.

让我们看看这个系统调用提供了哪些信息:

struct rusage {
struct timeval ru_utime; /* user time used */
struct timeval ru_stime; /* system time used */
long ru_maxrss; /* maximum resident set size */
long ru_ixrss; /* integral shared memory size */
long ru_idrss; /* integral unshared data size */
long ru_isrss; /* integral unshared stack size */
long ru_minflt; /* page reclaims */
long ru_majflt; /* page faults */
long ru_nswap; /* swaps */
long ru_inblock; /* block input operations */
long ru_oublock; /* block output operations */
long ru_msgsnd; /* messages sent */
long ru_msgrcv; /* messages received */
long ru_nsignals; /* signals received */
long ru_nvcsw; /* voluntary context switches */
long ru_nivcsw; /* involuntary context switches */
};

我认为这足以解决您的问题。

关于c - 一个跟踪 CPU 时间和内存使用情况的 Linux shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5194205/

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