Nie jestem zbyt dobry w bash, ale próbuję utworzyć skrypt, aby zabić niektóre procesy Java:
/usr/ucb/ps -auxww
| grep "XUnit"
| grep -v "grep"
| cut -c -2000
| awk "{print $2;}"
| xargs kill
cut
jest tu używany, ponieważ awk
może zawieść z nadmiernie długimi liniami (patrz odniesienia do LINE_MAX
limit w Specyfikacja POSIX dla awk).
Problem występuje, gdy nie ma takich procesów - xargs
próbuje uciekać kill
bez argumentów, co powoduje błąd.
Moje xargs nie akceptuje -r
lub --no-run-if-empty
argumenty, jak sugerowano w odpowiedziach na powiązane pytanie, które nie określa zgodności z POSIX.
Odpowiedzi:
4 dla odpowiedzi № 1Odnosząc się konkretnie do omawianego pytania, ignorując, czy dane podejście jest rzeczywiście właściwym sposobem na zabicie procesu:
xargs sh -c "[ $# -gt 0 ] && exec "$0" "$@"" kill
Takie podejście ma xargs
uruchom powłokę, która sprawdza długość listy argumentów (która będzie równa 0, jeśli tylko kill
jest przekazywany jako argumenty następujące -c "script"
zacząć od $0
, nieuwzględnione w $#
liczyć); ta powłoka uruchamia podane polecenie tylko wtedy, gdy podano co najmniej jeden argument.