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


13

Коли я намагаюся закрити вкладку в терміналі Gnome, він говорить:

Закрити цей термінал? У цьому терміналі ще триває процес. Закриття терміналу вб'є його.

Як я можу дізнатися, що все ще працює? Зауважте, що на виході нічого немає jobs. Дякую.


1
Якщо у вас з'являється запит на оболонку, поки відображається це повідомлення, ймовірно, це вкладена оболонка (а не та, яка безпосередньо запускається емулятором терміналу). Може бути , ви почали screen, tmux, script, ssh, mcі перевернув панелі від, або просто інший оболонки , наприклад , набравши bash, або що - то вздовж цих ліній. Натисніть Ctrl + D або введіть, exitщоб вийти з оболонки, ви побачите, де ви опинитесь.
Егмонт

Дякую. після цього exit, вкладка терміналу gnome не закривається.
Тім

1
Друга exit, мабуть, тоді його закриє. @egmont Ви можете перенести це на відповідь, будь ласка.
Videonauth

Відповіді:


13
ps T

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


Добре, хоча може бути трохи обманливим. Процеси, породжені nohupкомандою, відключаються від терміналу, тому не блокуйте його закриття. Але вони все ще перераховані з цією командою.
Сергій Колодяжний

Або просто ps з цього приводу
user10089632

2

Ви можете досягти піку в процесах, які перелічують PID вашої оболонки як батьківський. Як ви можете, чи не знаєте, ми можемо вказати psформат

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

Тут ми отримуємо PID оболонки зі спеціальної змінної $$в SHELLPID, яка потім може бути використана awk в нижній частині труби. По суті, ми просто перераховуємо процеси у формі NAME, PID, батьківський PID та фільтруємо лише тих, хто має відповідний PID в останньому стовпці.


2

Якщо ви запустили якийсь процес у терміналі (наприклад, gedit), ніж ідентифікатор процесу (PID) (bash) і батьківський процес ID (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


-1

Можна використовувати htop. В Ubuntu 16.04 (і вище) ви можете встановити його просто набравши текст sudo apt-get install htop.

Ви також можете використовувати top.


І як би ви визначили процеси в поточному терміналі, використовуючи htop?
муру
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.