2012-07-26 17 views
13

To co mam teraz w skrypcie bash:Bash Script, proces Zabij pociągając z pliku PID

ps aux | grep glassfish | grep domain1 | gawk '{print $2}' | xargs kill -9 

Problemem jest to, że jeśli ktoś jest zalogowany i ciągnąc coś związanego z GlassFish , będzie też ciągnął ten PID. W ten sposób zabijam niewłaściwy PID.

Moje pytanie brzmi: w jaki sposób mogę naprawić to, co mam, aby wyciągnąć tylko prawidłowy PID i jak go przepisać w celu pobrania PID z pliku PID, który generuje glassfish.

+11

Zabij -9 jest nieco trudny, czy na pewno potrzebujesz tego rodzaju przemocy? :-) –

Odpowiedz

17

Edit skrypt, który rozpoczyna GlassFish i umieścić coś takiego echo $$ > /path/to/PID-file (może zawierać ~ do katalogu domowego lub innego mechanizmu podobnego $USER do konkretnego użytkownika) na linii bezpośrednio po linii startu procesu. Następnie możesz zabić prawidłowy proces za pomocą kill $(cat /path/to/PID-file).

+0

Nawiasem mówiąc, ps a (usunięcie "tylko siebie") nie znajduje się w kodzie. Pomyłkowo wkleiłem to ze starego kodu. –

+4

UUOC dla bash. '$ ( jordanm

+4

@jordanm Wpływ na wydajność korzystania z kota tutaj będzie ledwo widoczny, nie mówiąc już o odczuciu użytkownika. Zrobię lepszą czytelność * każdego * dnia. Jeśli sprawi, że poczujesz się lepiej, możesz zamiast tego zastąpić go 'less', ale' $ ( Thor84no

0
ps aux | grep ^$USER | grep glassfish | grep domain1 | gawk '{print $2}' | xargs kill -9 

Poniżej zrobiłem błąd z ps przełączników, więc powyżej grep powinno być dobrze.


ah to nie działa, ps może być wykorzystanie takich jak ten ps -ao pid,tty,comm -u $USER, to grep powyżej powinno być dobrze ...

someone else is logged in ...

Jeśli tak, należy dodać przełącznik -u

ps aux -u $USER | grep glassfish | grep domain1 | gawk '{print $2}' | xargs kill -9 

$ USER to nazwa użytkownika, która zostanie wybrana i wymieniona, domyślnie powinna być już ustawione w środowisku systemu operacyjnego. Wielu użytkowników może zostać wybrany przez przecinkiem ps aux -u root,$USER

Zanotuj: Jeśli nie ma określonego nazwę użytkownika w systemie, ps rzuci BŁĄD: Nazwa użytkownika nie istnieje.

Przeczytaj man ps, aby uzyskać więcej informacji.

-u userlist Select by effective user ID (EUID) or name. This selects the processes whose effective user name or ID is in userlist. The effective user ID describes the user whose file access permissions are used by the process (see geteuid(2)). Identical to U and --user.

Powiązane problemy