Я хочу убить корневые процессы, содержащие foo в имени процесса
sudo sh -c "ps aux | grep [f]oo | awk '{print $2}' | xargs kill -15"
эта команда не выполняется, поскольку awk и xargs игнорируются.
sudo sh -c "ps aux | grep [f]oo | awk '{print $2}' | xargs kill -15"
так убить получает плохие аргументы
kill pid ... Send SIGTERM to every process listed.
kill signal pid ... Send a signal to every process listed.
kill -s signal pid ... Send a signal to every process listed.
kill -l List all signal names.
kill -L List all signal names in a nice table.
kill -l signal Convert between signal numbers and names.
command-line
sudo
awk
xargs
Dave
источник
источник
ps aux | grep "[f]oo"
показать вам процессы, которые вас интересуют? Есть лиps aux | grep "[f]oo" | awk '{print $2}'
показать свои PID? (П.С. рекомендую ставить[f]oo
в кавычках.)ps aux | grep "[f]oo" | awk '{print $2}' | xargs /bin/echo kill –15
?awk
а такжеxargs
игнорируются »? Вы получаете сообщения об ошибках, о которых вы нам не сообщаете?Ответы:
Это безобразный хак, и
kill
будет жаловаться, но это работает (для меня, по крайней мере):&>/dev/null
часть не обязательна; включите его, если вы не хотите видеть всеkill
жалобы.Я знаю, что, возможно, есть лучший способ сделать это, но это то, что я использую.
источник
Как уже упоминалось
pgrep
а такжеpkill
ваши друзья:Если по какой-то причине у вас нет
pgrep
а такжеpkill
Вы можете сделать что-то вроде этого:источник
Я считаю, что ваша настоящая проблема заключается в цитировании. В двойных кавычках $ 2 раскрывается еще до того, как оно передается в sh. Одинарные кавычки, используемые в вашем коде, не изолируют это, потому что это просто символы в кавычках. Попробуйте один из этих методов цитирования:
sh -c 'ps aux | grep [f]oo | awk '\''{ print $2 }'\'
sh -c $'ps aux | grep [f]oo | awk \'{ print $2 }\''
sh -c "ps aux | grep [f]ox | awk '{ print \$2 }'"
источник
Таким образом, вы можете избежать двойных кавычек. Результат должен быть таким же.
источник