#linux #bash
#linux #bash
Вопрос:
Я хочу иметь возможность завершать все задачи с заданным именем, передавая их соответствующий PID kill -9
. Я получаю список соответствующих задач, выполнив sudo fuser -v /dev/nvidia*
, который возвращает следующее:
USER PID ACCESS COMMAND
/dev/nvidia0: root 1756 F...m Xorg
gdm 1940 F.... gnome-shell
root 12907 F...m Xorg
pedro 69644 F.... atom
pedro 89407 F.... chrome
pedro 89409 F.... chrome
pedro 90137 F.... gnome-shell
/dev/nvidia1: root 1756 F...m Xorg
gdm 1940 F...m gnome-shell
root 12907 F...m Xorg
pedro 59275 F...m python3.6
pedro 59278 F...m python3.6
pedro 69644 F...m atom
pedro 89407 F...m chrome
pedro 89409 F...m chrome
pedro 90137 F...m gnome-shell
/dev/nvidiactl: root 1756 F...m Xorg
gdm 1940 F...m gnome-shell
root 12907 F...m Xorg
pedro 59275 F...m python3.6
pedro 59278 F...m python3.6
pedro 69644 F...m atom
pedro 89407 F...m chrome
pedro 89409 F...m chrome
pedro 90137 F...m gnome-shell
/dev/nvidia-modeset: root 1756 F.... Xorg
gdm 1940 F.... gnome-shell
root 12907 F.... Xorg
pedro 69644 F.... atom
pedro 89407 F.... chrome
pedro 89409 F.... chrome
pedro 90137 F.... gnome-shell
/dev/nvidia-uvm: pedro 59275 F...m python3.6
pedro 59278 F...m python3.6
До сих пор я кропотливо вручную уничтожал отдельные PID, соответствующие задачам python3.6, но это не очень практично! Есть ли способ систематически перебирать все задачи, возвращаемые fuser
командой, и передавать PID, соответствующие (в данном случае) python3.6, kill
команде, например, используя скрипт bash? Был бы очень признателен за любую помощь.
Ответ №1:
Используя свой fuser
вывод, вы могли бы получить pid и kill
их следующим образом:
fuser -v /dev/nvidia* | awk '/python3.6/{print $(NF-2)}' | xargs kill -9
Если у вас есть дубликаты, как в примере, добавьте | sort -u
предпоследнюю команду. Протестируйте без последней команды, если вы получите нужные PID.
Ответ №2:
Я бы выбрал комбинацию pgrep
и pkill
: используя pgrep
, вы можете найти все PID, подчиняясь некоторому шаблону. Как только у вас будет правильный список PID, вы можете использовать pkill
для отправки правильного сигнала этим процессам.
Комментарии:
1. OP должен определить какой-либо новый шаблон (если существует) для
pgrep
соответствия процессам python3.6, использующим определенный файл. Если нет, он должен использоватьfuser
илиlsof
для включения файла (/dev/ nvidia *)
Ответ №3:
Повторяющиеся вопросы — можно найти другой ответ: https://unix.stackexchange.com/questions/602204/kill-processes-shown-by-sudo-fuser-filtered-by-command-column
Вы можете отключить pid, передав -k
в fuser
.
$ sudo fuser -k -9 /dev/nvidia*
Комментарии:
1. OP хочет фильтровать процессы по имени команды («python3.6»), дополнительно к используемому файлу. Также я заглянул на страницу руководства, но не обнаружил, что fuser может сделать это в одиночку.
Ответ №4:
В Unix Stack Exchange есть сообщение, которое отвечает именно на этот вопрос: https://unix.stackexchange.com/questions/602204/kill-processes-shown-by-sudo-fuser-filtered-by-command-column