Просмотр процесса переднего плана с помощью ps

Просмотр процесса переднего плана с помощью ps

Я могу увидеть фоновый процесс с помощью ps. Но есть ли способ увидеть процесс переднего плана? Например,

$nohup процесс1 &

затем

пс -ef | grep "процесс1"

отобразит процесс "process1" в процессе выполнения. Но команда выше не отобразит процесс переднего плана, выполняемый как,

$процесс2

решение1

Вы можете быть сбиты с толку, так как psпо умолчанию отображаются процессы, которые находятся на том же терминале, где psони вызваны, например, процессы, запущенные из того же окна терминала.

Попробуйте ps -u $LOGNAMEили , если вы знаете названия терминалов ps -t $THETTYNAME1,$THETTYNAME2. (Имена терминалов обычно выглядят как «ttyN» или «pts/N»).

решение2

Странно, но команда ps позволяет отслеживать состояние всех активных процессов, как активных, так и фоновых.

Например, я запускаю следующий процесс в первой оболочке:

$ startNetworkServer 
Security manager installed using the Basic server security policy.
Apache Derby Network Server - 10.3.2.1 - (599110) started and ready to accept connections on port 1527 at 2010-06-18 14:14:33.277 GMT 

И в другой оболочке:

$ ps aux  | grep NetworkServer | grep -v grep
pascal    5928  0.3  1.4 661492 29216 pts/0    Sl+  16:14   0:03 /usr/lib/jvm/java-6-sun/bin/java -classpath /usr/share/javadb/lib/derby.jar:/usr/share/javadb/lib/derbynet.jar:/usr/share/javadb/lib/derbytools.jar:/usr/share/javadb/lib/derbyclient.jar org.apache.derby.drda.NetworkServerControl start

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

решение3

Вопрос:

«Есть ли способ просмотреть процесс переднего плана?»Затем в вопросе утверждается, что ps -efне отображаются процессы, работающие на переднем плане.

Отвечать:

Да, есть способ. Также:ps -ef делаетпоказать процессы, запущенные на переднем плане -но это не показываетсостояниепроцессов. Это объясняется в документации ( man ps), и может быть проверено в простом эксперименте. Рассмотрим этот пример:

В одном терминале выполните:

ping 8.8.8.8 > /dev/null

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

ps -ef | grep ping | grep -v grep
seamus        1161   974  0 23:20 pts/1    00:00:00 ping 8.8.8.8

Обратите внимание, что ps -efне обеспечиваетсостояниеинформация в его выводе. Однако, man psобъясняет, чтосостояниеинформациядоступениспользуя -oаргумент вместе с ключевым словом stat:

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

Что говорит нам:

  • PID процесса определяется 1161через ключевое словоpid
  • процесссостояниечерез S+ключевое словоstat
  • ключевое commandслово показывает, ping 8.8.8.8что породило процесс

Theсостояниезначение S+естьраскодированов man psразделе под заголовком PROCESS STATE CODE., который говорит нам:

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

ЧТЭК

Мы видели, что ps -efперечисляет процессы, PID которых равен 1161, и что ps -eo pid,stat,commandраскрываетсостояниеPID 1161бытьпередний планпроцесс.


ПРИМЕЧАНИЕ 1: ключевые словадля -oаргумента описаны в man psпод заголовком STANDARD FORMAT SPECIFIERS. Здесь объясняется, что ключевое слово statдает двухсимвольный процесссостояние, в то время как ключевое слово stateвыдает только односимвольныйсостояние.

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

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