Я запускаю задания физического анализа в компьютерной сетке. Когда-то рабочие места идут не так, и я должен их убивать (один за другим), что является болезненным. Не могли бы вы предложить мне, как я могу выбрать только числовые значения (748736838 и т. Д.) Из этого вывода:
$ps -W mhaque -748736838 0 W mhaque -748736879 0 W mhaque -748737079 0 W mhaque -748737185 0 W mhaque -748737276 0 W
(и сотни строк, подобных этому)
Я попробовал несколько команд sed
/ awk
/ grep
(из stackExchange), но не смог отделить числовые значения. Есть ли команда, которая может выбирать числовые значения, а также «убивать» перед ними? Например, что-то вроде этого (трубопровод):
ps -W | awk/sed/grep (what_to_use) | (some_command to place "kill") | > file.list
Который дал бы мне следующее (в файле.list):
kill 748736838 kill 748736879 ...so on..
Затем я могу просто скопировать его в оболочку сетки, чтобы убить все оскорбительные / длительные задания.
Если вы хотите убить все задания mhaque , это еще проще сделать:
pkill -9 mhaque
( -9 – сигнал для отправки, в этом случае я выбрал SIGKILL , изменив его в соответствии с вашими потребностями).
Также,
pidof mhaque
возвращает простой список PID рабочих заданий, и ничего больше. Вы можете использовать его также следующим образом
kill -9 $(pidof mhaque)
который производит тот же эффект, что и первая команда. Все это намного проще, чем сценариев. Например,
$ vlc fulvio.mkv &> /dev/null & [1] 28006 $ vlc fulvio.mkv &> /dev/null & [2] 28028 $ pidof vlc 28028 28006 $ pkill -9 vlc $ ps ax | grep vlc 28054 pts/18 S+ 0:00 grep --color=auto vlc [1]- Killed vlc fulvio.mkv &> /dev/null [2]+ Killed vlc fulvio.mkv &> /dev/null
EDIT :
в ответ на пояснения, содержащиеся в комментарии, команда
ps -W | awk '{print $2}' | cut -d"-" -f2
создает простой список идентификаторов рабочих мест. Вы можете записать их в файл или обработать их напрямую, как
kill -9 $(ps -W | awk '{print $2}' | cut -d"-" -f2)
EDIT2
Я немного удивлен, что это не работает должным образом, потому что вышеприведенная команда является стандартным Bash. В какой системе вы находитесь, точно? Во всяком случае, вы можете попробовать:
for i in $(ps -W | awk '{print $2}' | cut -d"-" -f2); do kill -9 $i; done