Как найти все еще запущенные процессы в терминале?

Когда я пытаюсь закрыть вкладку в Gnome Terminal, он говорит:

Закрыть этот терминал? В этом терминале все еще выполняется процесс. Закрытие терминала убьет его.

Как я могу узнать, что еще работает? Обратите внимание, что в выводе ничего нет jobs, Благодарю.

4 ответа

ps T

Выбирает все процессы, связанные с терминалом.

Если вы запустили какой-то процесс в терминале (например, gedit), то идентификатор процесса (PID) (из bash) и идентификатор родительского процесса (PPID) (из gedit) для этих двух процессов будут одинаковыми. Это можно увидеть на выходе

ps -ef

команда. Чтобы сделать его более читабельным, давайте сначала передадим вывод grep найти PID всех запущенных в настоящее время процессов "bash", а затем снова "передать" awk, awk выбирает только поля PID и имени процесса (поля 2 и 8) и выводит их на экран.

ps -ef | grep bash | awk '{print $2 ": " $8}'

Число на выходе - PID. Вы будете использовать его, чтобы узнать, какой процесс был запущен в терминале с этим PID. Обратите внимание, что может быть более одной строки вывода, если у вас открыто более одного терминала. Теперь, чтобы найти "дочерние" процессы (если таковые имеются) этих терминальных сессий, мы можем использовать эту команду:

ps -ef | awk '{if ($3 == EnterPID) print $2 ": " $8;}'

Вы должны ввести номер PID вместо EnterPID в последней команде. Если для "bash" существует более одного PID, вы должны попробовать их все.

Последняя команда просто смотрит вывод ps -ef и ищет, совпадают ли PID (который вы нашли в предыдущей команде) и PPID для любого процесса.

Больше информации:

человек пс

человек awk

Вы можете оценить процесс, в котором PID вашей оболочки указан как родительский. Как вы можете или не можете знать, мы можем указать ps формат

SHELLPID=$$ ; ps -e  -o cmd,pid,ppid | awk -v shell=$SHELLPID  '$NF~shell'   

Здесь мы получаем PID оболочки из специальной переменной $$ в SHELLPID, который затем может использоваться awk в подоболочке трубы. По сути, мы просто перечисляем процессы в форме NAME,PID,Parent PID и отфильтровываем только тех, кто имеет соответствующий PID в последнем столбце.

Ты можешь использовать htop, В Ubuntu 16.04 (и выше) вы можете установить его, просто набрав sudo apt-get install htop,

Вы также можете использовать top,

Другие вопросы по тегам