Czyste wyjście dla xargs

1

W ramach skryptu tunelowego chciałem usunąć / zabić istniejące tunele

Do tej pory udało mi się dostać do:

matt @ HY731AA: ~ $ ps aux | grep "ssh -N lin1tunnels" | grep -v grep | awk '{print 2 USD}' | xargs -0 kill -9 BŁĄD: ID procesu czyszczenia pamięci „5321 5322”.

Wygląda na to, że dane wyjściowe zawierają „chociaż usunięcie xargs nie pokazuje”, istnieje sposób na wyczyszczenie danych wyjściowych gotowych na xargs. A może ktoś zna lepszy sposób na osiągnięcie powyższego

Mâtt Frëëman
źródło

Odpowiedzi:

4

@ Sugestia Johna dotycząca pkill jest czystszym sposobem na zrobienie tego (jeśli go masz), ale tylko dla przypomnienia: problem polega na tym, że używasz -0flagi xarg (która każe szukać wartości rozdzielanych zerami ), ale wysyłanie wartości rozdzielane znakiem nowej linii. Ponadto zamiast używać drugiego grepa do usunięcia pierwszego z wyników, wyszukaj wzór, który nie pasuje do siebie:

ps aux | grep "[s]sh -N lin1tunnels" | awk '{print $2}' | xargs kill -9
Gordon Davisson
źródło
4

Edytuj :

Użyj pkill:

 pkill -9 -f "ssh -N lin1tunnels"

Unikaj wysyłania SIGKILLsygnału do określonego procesu lub grupy procesów. Przeczytaj Bezużyteczne użycie Kill -9

Książę John Wesley
źródło
Wygląda na to, że proces nie działa, zarówno z -9, jak i bez
Mâtt Frëëman,
1
Musisz dodać, -faby wyszukać pełne polecenie z argumentami, a nie tylko nazwę polecenia.
glenn jackman
@glenn: tak. tęskniłem za tym. + 1.
Książę John Wesley