linux - 如何从/proc 目录中读取所有后台进程?

标签 linux process c background-process proc

我想获取操作系统中运行的所有后台进程的列表。作业命令完成工作。但我正在使用 C 来完成任务。主要问题是,如何使用/proc/{pid} 中的状态文件区分后台进程和前台进程。

最佳答案

后台进程是进程组的成员进程,该进程组不是其控制终端上的前台进程组

来自/proc/PID/stat的相应字段是:

          (5) pgrp  %d
                    The process group ID of the process.
          (8) tpgid  %d
                    The ID of the foreground process group of the control‐
                    ling terminal of the process.

所以这些字段对于后台进程来说是不同的。 (3) state(7) tty_nr(6) session 也很有用。

(字段编号从1开始)

以下将打印(当从启用作业控制的交互式 shell 运行时)当前 session 中所有未停止的后台进程:

awk -vsid=$$ '$6==sid && $3!="T" && $5!=$8 {print $1, $2}' /proc/[0-9]*/stat

为简单起见,假设进程名称(括号中的第二个字段)不包含空格;您必须首先在括号中分割线,然后在空格中分割线。

另请注意,这还将打印从子 shell 启动的进程,这些进程不在 shell 的作业表中(例如 (sleep 3600 &))。

关于linux - 如何从/proc 目录中读取所有后台进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55195636/

相关文章:

linux - 将字符串传递给脚本

Golang - 按名称杀死进程

c - 对子进程的操作 C

c# - Process.MainModule --> "Access is denied"

c - 内存中的结构赋值和持久化(C语言)

c - 以编程方式访问shell扩展,替换和单词拆分

Linux 上的 Java + PDFBox

c - C中的(一些)UTF8字符串函数是什么

c - 使用 select() 阻塞,直到获得或失去客户

c - 如何在链表中查找重复项?