Как прочитать все фоновые процессы из каталога / proc? - PullRequest
1 голос
/ 15 марта 2019

Я хочу получить список всех фоновых процессов, работающих в ОС.Команда job выполняет работу.Но я использую C, чтобы сделать задачу.Основная проблема заключается в том, как отличить фоновые процессы от процессов переднего плана, используя файл состояния в / proc / {pid}.

1 Ответ

1 голос
/ 15 марта 2019

Фоновые процессы - это процессы, которые являются членами группы процессов, которая не является приоритетной группой процессов на их управляющем терминале .

Соответствующие поля из /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

Для простоты предполагается, что имя процесса (второе поле в скобках) не содержит пробелов;вам придется справиться с этим, сначала разделив строку в скобках, а затем на пробел.

Также обратите внимание, что это также приведет к печати процессов, запущенных из подоболочек, которых нет в таблице заданий оболочки (например, * 1025).*).

...