Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何从/proc目录读取所有后台进程?_Linux_Process_C_Background Process_Proc - Fatal编程技术网

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

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==

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

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

中的相应字段为:

因此,对于后台进程,这些字段将是不同的。同样有用的还有
(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