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ść.