Jak znaleźć wciąż działające procesy w terminalu?


13

Kiedy próbuję zamknąć kartę w Gnome Terminal, mówi:

Zamknąć ten terminal? W tym terminalu nadal działa proces. Zamknięcie terminalu go zabije.

Jak mogę dowiedzieć się, co nadal działa? Zauważ, że nie ma nic w danych wyjściowych jobs. Dzięki.


1
Jeśli pojawi się monit powłoki, gdy ten komunikat jest wyświetlany, prawdopodobnie jest to zagnieżdżona powłoka (nie ta uruchomiona bezpośrednio przez emulator terminala). Być może już rozpoczął screen, tmux, script, ssh, mci odwrócił się panele, czy tylko kolejny przykład Shell od typowania bash, lub coś wzdłuż tych linii. Naciśnij Ctrl + D lub wpisz, exitaby wyjść z powłoki, zobaczysz, gdzie skończysz.
egmont

Dzięki. potem exitkarta terminalu gnome nie zamyka się.
Tim

1
Sekund exitprawdopodobnie go wtedy zamknie. @egmont, możesz przenieść to do odpowiedzi, proszę.
Videonauth

Odpowiedzi:


13
ps T

Wybiera wszystkie procesy związane z terminalem.


Dobrze, choć może być nieco mylące. Procesy spawnowane za pomocą nohuppolecenia są odłączone od terminala, więc nie blokuj jego zamykania. Ale nadal są wymienione za pomocą tego polecenia.
Sergiy Kolodyazhnyy

Lub po prostu ps w tym przypadku
użytkownik10089632

2

Możesz zdobyć szczyt w procesach, które wymieniają PID twojej powłoki jako nadrzędną. Jak możesz wiedzieć, możemy określić psformat

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

Tutaj otrzymujemy PID powłoki ze specjalnej zmiennej $$na SHELLPID, która następnie może być użyta przez awk w podpowłoce potoku. Zasadniczo wymieniamy tylko procesy w postaci NAZWA, PID, nadrzędny PID i odfiltrowujemy tylko tych, którzy mają odpowiedni PID w ostatniej kolumnie.


2

Jeśli uruchomiłeś jakiś proces w terminalu (np. Gedit) niż ID procesu (PID) (bash) i ID procesu nadrzędnego (PPID) (gedit) dla tych dwóch procesów będą takie same. Można to zobaczyć na wyjściu

ps -ef

Komenda. Aby był bardziej czytelny, najpierw „potokuj” wyjście, aby grepznaleźć PID wszystkich aktualnie uruchomionych procesów „bash”, a następnie „potokuj” go ponownie awk. W awkwybiera tylko PID i pola nazwę procesu (pole 2 i 8), i przekazuje je na ekranie.

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

Liczba na wyjściu to PID. Użyjesz go, aby znaleźć proces rozpoczęty w terminalu, który ma ten PID. Zauważ, że może być więcej niż jeden wiersz wyjścia, jeśli masz więcej niż jeden terminal otwarty. Teraz, aby znaleźć procesy „potomne” (jeśli w ogóle) tych sesji terminalowych, możemy użyć tego polecenia:

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

Musisz podać numer PID zamiast EnterPID w ostatnim poleceniu. Jeśli dla „bash” istnieje więcej niż jeden PID, musisz wypróbować je wszystkie.

Ostatnie polecenie po prostu sprawdza dane wyjściowe ps -efi sprawdza, czy PID (znaleziony w poprzednim poleceniu) i PPID są takie same dla dowolnego procesu.

Więcej informacji:

człowiek ps

człowiek awk


-1

Możesz użyć htop. W Ubuntu 16.04 (i nowszych) możesz go zainstalować, pisząc sudo apt-get install htop.

Możesz także użyć top.


A w jaki sposób identyfikowałbyś procesy w bieżącym terminalu za pomocą htop?
muru
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.