确定进程的状态

发布于 2025-01-05 04:33:46 字数 269 浏览 1 评论 0原文

我试图在 Linux 环境中使用 C 来找出进程的状态(运行、睡眠或退出)。

我最初对如何执行此操作的想法是使用命令 ps 12345 调用 execv() ,其中 12345 是进程 ID,然后按顺序解析其输出获取统计数据。但是,我不认为我可以将其输出输入到我的程序中,因为它只是自动输出(或者我可以吗?)。

我也在想我可以向进程发送信号,但我还没有找到一个好的方法来做到这一点,我什至不知道是否可以通过这种方式确定进程状态。

所以,我的问题是,如何确定 C 中进程的状态?

I am trying to figure out the state of processes using C (running, sleeping, or exited), in a linux environment.

My thoughts on how to do this initially were to call execv() with the command ps 12345 where 12345 would be the process ID, and then parse the output of that in order to get the STAT. However, I don't think that I can get the output of that into my program, as it just outputs automatically (or can I?).

I was also thinking that I could send the process a signal, but I haven't found a good way to do this, and I don't even know if it is possible to determine the process state in this manner.

So, my question is, how do I determine the state of a process in C?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

囚我心虐我身 2025-01-12 04:33:46

在 Linux 中,有一个名为 /proc/[pid]/stat 的空格分隔值文件。第三个值是进程状态。

例如:

[cnicutar@fresh self]$ cat /proc/3529/stat
3529 (bash) S 3528 3529 ......
            ^

或者,还有一个 /proc/[pid]/status 文件:

[cnicutar@fresh self]$ cat /proc/3529/status
Name:   bash
State:  S (sleeping)
....................

我只会在 stat 上使用 fscanf

In linux there's a file of space-separated values called /proc/[pid]/stat. The third value is the process state.

For example:

[cnicutar@fresh self]$ cat /proc/3529/stat
3529 (bash) S 3528 3529 ......
            ^

Alternatively, there's also a /proc/[pid]/status file:

[cnicutar@fresh self]$ cat /proc/3529/status
Name:   bash
State:  S (sleeping)
....................

I would just use fscanf on stat.

独行侠 2025-01-12 04:33:46

如果您想解析命令的输出,请使用popen

我想有一个更简单的方法可以做到这一点,必须有一个 C API 来访问进程信息...(注意:还有 /proc/12345/status

If you want to parse the output of a command, use popen.

I guess there is an easier way to do this, there must be a C API to access process information... (note: there is also /proc/12345/status)

沉睡月亮 2025-01-12 04:33:46

看看这个: http://sourceforge.net/p/readproc/ code/ci/master/tree/

您可以使用 struct Job.status 来实现此目的。

#include"read_proc.h"
int main(void)
{
   struct Root * root=read_proc();
   printf("state: %c\n",root->first->status);
   return 0;
}

Take a look at this: http://sourceforge.net/p/readproc/code/ci/master/tree/

you may use struct Job.status for this.

#include"read_proc.h"
int main(void)
{
   struct Root * root=read_proc();
   printf("state: %c\n",root->first->status);
   return 0;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文