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

时间:2019-03-15 04:30:01

标签: linux process c background-process proc

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

1 个答案:

答案 0 :(得分:1)

后台进程是属于其控制终端上的前台进程组的进程组成员的进程。

/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开始)

以下内容(从启用了作业控制的交互式外壳运行时)将打印当前会话中所有未停止的后台进程:

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

为简单起见,这是假定进程名称(括号中的第二个字段)不包含空格;您必须先在括号上然后在空格处将线分开,以解决该问题。

还请注意,这还将打印从子shell开始的进程,这些子shell不在shell的jobs表中(例如(sleep 3600 &))。