Как узнать, запущен ли процесс в фоновом или приоритетном режиме в выводе команды «ps» или «ps -ef»?

Как узнать, запущен ли процесс в фоновом или приоритетном режиме в выводе команды «ps» или «ps -ef»?

Как узнать, запущен ли процесс в фоновом или приоритетном режиме в командах psили ps -ef?

Сначала я подумал, что когда я ввожу ps -ef, есть раздел с названием TTY. Когда я смотрю на список TTY, большинство из них ?. Интересно, означает ли этот вопросительный знак процесс, работающий в фоновом режиме.

Я хочу проверить, прав ли я! Если нет, то как узнать, запущен ли процесс в фоновом режиме или на переднем плане?

ps. команда jobsздесь не используется.

решение1

Полеstatимеет дополнение +для процессов переднего плана:

ps -e -o pid,tty,stat,cmd

Процессы переднего плана — это те, чей идентификатор группы процессов ( pgid) является идентификатором переднего плана на терминале ( tpgid):

ps -e -o pid,pgid,tpgid,tty,cmd | awk '$2==$3'

Когда я смотрю на список TTY, большинство из них — это «?» (вопросительные знаки). Интересно, означает ли этот вопросительный знак, что процесс выполняется в фоновом режиме?

Нет, это означает, что у них нет управляющего tty (демонов или потоков ядра, ни переднего плана, ни заднего плана). Для спискафонпроцессы:

ps -e -o pid,pgid,tpgid,tty,cmd | awk '$3!=-1 && $2!=$3'

решение2

Автор вопроса спросил: «... как узнать, запущен ли процесс в фоновом режиме или на переднем плане?»

Статус переднего плана и фонапроцесссообщаются psкаксостояниепроцесса. man psперечисляет этипроцессы состоянияпод заголовком PROCESS STATE CODE.

ps -efне сообщает о состоянии процесса, но ссылаясь на раздел man ps, мы находим OUTPUT FORMAT CONTROL, что -oаргумент может использоваться для указания вывода psчерез один или несколькоключевые слова. Этиключевые словаперечислены в STANDARD FORMAT SPECIFIERSразделе, и с необычайной настойчивостью в конечном итоге можно найти ключевые слова s, statи stateперечисленные. Но обратите внимание, что хотя все три из нихключевые словабудет предоставлятьсостояниена выходе толькоstat ключевое словодаст multi-character process state! Вывод:psблагоприятствует добросовестному пользователю.

В качестве примера следующая psкоманда выведетПИД,состояние, икомандакоторый начал процесс с использованиемключевые слова pid, statи command:

ps -eo pid,stat,command

Чтобы увидеть, как это работает, рассмотрим следующий пример:

В одном терминале выполните следующую команду:

ping 8.8.8.8 > /dev/null

В другом терминале:

ps -eo pid,stat,command | grep ping | grep -v grep
12518 S+   ping 8.8.8.8

Что сообщает нам:

  • PID-это12518
  • процесссостояниеесть S+(через ключевое слово stat)
  • что commandпородило этот процесс, былоping 8.8.8.8

Требуется еще один шаг, чтобы узнать, является ли этот процесс передним или задним планом:состояниезначение S+должно бытьраскодированопод man psзаголовком PROCESS STATE CODE- который говорит нам:

S прерываемый сон (ожидание завершения события)
+ находится в группе процессов переднего плана

Следовательно, мы видим из +позиции второго символа, что этот процесс выполняется впередний план. Фоновый процесс может быть указан с Sпервой позицией символа и без него во второй позиции. Существует несколько других комбинаций символов, которые указывают на фоновый процесс; см.этотдля листинга.


Кстати:Это работает в моей системе на базе Debian (указана версия ps from procps-ng 3.3.15), а также в macOS 10.15 (которая произошла от версии BSD ps).

Связанный контент