Как найти все еще запущенные процессы в терминале?
Когда я пытаюсь закрыть вкладку в Gnome Terminal, он говорит:
Закрыть этот терминал? В этом терминале все еще выполняется процесс. Закрытие терминала убьет его.
Как я могу узнать, что еще работает? Обратите внимание, что в выводе ничего нет jobs, Благодарю.
4 ответа
Если вы запустили какой-то процесс в терминале (например, 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 для любого процесса.
Больше информации:
Вы можете оценить процесс, в котором 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,