
Я могу увидеть фоновый процесс с помощью 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
).