Linux 如何从/proc目录读取所有后台进程?
我想获得操作系统中运行的所有后台进程的列表。job命令完成这项工作。但是我用C来完成这个任务。主要问题是,如何使用/proc/{pid}中的状态文件区分后台进程和前台进程 后台进程是进程组的成员,该进程组不是其控制终端上的前台进程组 中的相应字段为: 因此,对于后台进程,这些字段将是不同的。同样有用的还有Linux 如何从/proc目录读取所有后台进程?,linux,process,c,background-process,proc,Linux,Process,C,Background Process,Proc,我想获得操作系统中运行的所有后台进程的列表。job命令完成这项工作。但是我用C来完成这个任务。主要问题是,如何使用/proc/{pid}中的状态文件区分后台进程和前台进程 后台进程是进程组的成员,该进程组不是其控制终端上的前台进程组 中的相应字段为: 因此,对于后台进程,这些字段将是不同的。同样有用的还有(3)状态,(7)tty_nr和(6)会话 (字段编号以1为基础) 以下内容将打印(从启用作业控制的交互式shell运行时)当前会话中所有未停止的后台进程: awk -vsid=$$ '$6==
(3)状态
,(7)tty_nr
和(6)会话
(字段编号以1为基础)
以下内容将打印(从启用作业控制的交互式shell运行时)当前会话中所有未停止的后台进程:
awk -vsid=$$ '$6==sid && $3!="T" && $5!=$8 {print $1, $2}' /proc/[0-9]*/stat
为了简单起见,这是假设进程名(括号中的第二个字段)不包含空格;您必须首先在括号中拆分行,然后在空格中拆分行
还请注意,这也将打印从子shell启动的进程,这些进程不在shell的jobs表中(例如
(sleep 3600&)
)。@RamanSailopal,不,如果它们在后台运行,当然不会,特别是关于/proc//stat
的第5和第8个字段。通常,后台进程是指其进程组
不是tty的前台进程的进程。也就是说,它们是不同的。这对我帮助很大。
awk -vsid=$$ '$6==sid && $3!="T" && $5!=$8 {print $1, $2}' /proc/[0-9]*/stat