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

问题描述 投票:1回答:1

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

linux process c background-process proc
1个回答
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开始)

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.