data.mdx.frontmatter.hero_image

Ubijanie procesów na Mac-u

2018-05-12 | OS X | bd90

W codziennej pracy w obszarze IT, większość ludzi uruchamia oprogramowanie, które działa na porcie TCP. Czy to serwer lokalny, baza danych, czy cokolwiek innego, to czasami zdarza się, że losowy proces zawiśnie w systemie i zablokuje dostęp do portu. Kiedyś jak telewizor się psuł wystarczyło walnąć lżej lub mocniej. Teraz nie ma tak łatwo. Dlatego, w dzisiejszym artykule, chciałbym wam przedstawić jak ubijać wiszące procesy na systemie Mac OS X. Jako, że przestawione sposoby będą korzystać z konsoli systemowej, to istnieje bardzo duże prawdopodobieństwo, że zadziałają też na linuxie (ale tego nie testowałem :)

Pobranie listy procesów

Zanim przejdziemy do samego ubijania procesów, chcę wam pokazać jak wyświetlić wszystkie bieżące procesy na naszej maszynie. Służy do tego pojedyncza komenda

$ ps aux

Wynik tej komendy możecie zobaczyć na gif-ie poniżej:

W zależności, ile programów jest odpalonych na waszym komputerze, ta lista może być krótsza lub dłuższa. U mnie, jak widać, ta lista jest pokaźna. Ciągnie się przez ponad 2 ekrany mojego monitora. Jakbym tutaj miał znaleźć ten proces, który zablokował mi port, to chyba bym zwariował.

Pobranie listy procesów tylko z jakiegoś portu

Chcąc ograniczyć liczbę wyników, możemy użyć kombinacji narzędzi "lsof" i "grep". Wykonując komendę:

$ lsof -iTCP -sTCP:LISTEN -n -P | grep :9000

otrzymamy wszystkie procesy, które działają na porcie 9000.

Możemy dość mocno ją skrócić za pomocą podwójnego wywołania funkcji grep:

$ lsof -i -n -P | grep TCP | grep :3000

Tym razem, w przykładzie, poszukiwane są wszystkie procesy działające na porcie 3000.

Ubijanie procesu

Teraz, gdy już wiemy jak wygadają procesy działające na danym porcie, mamy dwa sposoby na ich ubicie.

Pierwszym z nich jest ubijanie procesu po nazwie. Wystarczy wykorzystać komendę "pkill" w następujacy sposób

$ pkill node

W ten sposób ubijamy wszystkie procesy o nazwie "Node". To szybka metoda, lecz ryzykujemy możliwością ubicia procesów z innych portów.

Innym sposobem jest przekazanie output-u komendy "lsof" jako argument komendy kill. W ten sposób ubijemy tylko procesy, które wykorzystują dany port.

$ lsof -ti:3000 | xargs kill

Przykład ubijania procesów na porcie 3000.

Podsumowanie

Dzisiaj bardzo krótki artykuł, mam nadzieje że pomocny!

Do Następnego :)

Cześć.

By Bd90 | 12-05-2018 | OS X