Как завершить (убить) несколько процессов, имея их PID?

Сначала формирую список PID процессов, которые занимают более 80% CPU:
  • 28 февраля 2026 г. 13:01
Ответы на вопрос 3
Ниже — несколько безопасных и удобных способов завершить несколько процессов по их PID. Предположим, что вы уже умеете получать PID процессов с CPU > 80%, например так:

ps -eo pid,pcpu --no-headers | awk '$2>80{print $1}'

1) Самый простой (одним вызовом kill)
pids=$(ps -eo pid,pcpu --no-headers | awk '$2>80{print $1}')
[ -n "$pids" ] && sudo kill $pids

Комментарий: сначала отправляется SIGTERM (по умолчанию). Без sudo если у вас хватает прав. Команда ничего не сделает, если переменная пустая.

2) Через xargs (если хотите сразу отправить SIGKILL)
ps -eo pid,pcpu --no-headers | awk '$2>80{print $1}' | xargs -r sudo kill -9

Примечание: xargs -r (или --no-run-if-empty) предотвращает выполнение kill, если списка нет. На macOS вместо -r может понадобиться --no-run-if-empty (в BSD xargs есть --no-run-if-empty).

3) Безопасный двухэтапный подход (сначала SIGTERM, если не умирают — SIGKILL)
pids=$(ps -eo pid,pcpu --no-headers | awk '$2>80{print $1}')
if [ -n "$pids" ]; then
  echo "Будут посланы SIGTERM для PID: $pids"
  sudo kill $pids
  sleep 5
  # проверим, какие ещё живы
  for pid in $pids; do
    if kill -0 $pid 2>/dev/null; then
      echo "PID $pid не завершился, посылаем SIGKILL"
      sudo kill -9 $pid
    fi
  done
fi

4) По одному PID (цикл)
ps -eo pid,pcpu --no-headers | awk '$2>80{print $1}' | while read pid; do
  echo "Killing $pid"
  sudo kill $pid
done

Важные замечания
- Старайтесь сначала отправлять SIGTERM (kill), а не сразу SIGKILL (-9). SIGKILL не даёт процессу шанс корректно освободить ресурсы или сохранить данные.  
- Проверяйте список PID перед убийством, чтобы не завершить системные процессы или процессы root по ошибке.  
- Для выполнения kill на чужих процессах может потребоваться sudo/root.  
- На некоторых системах ps/awk вывод могут отличаться — корректируйте команды под свою систему.

Если хотите, могу предложить готовую команду с выводом списка перед завершением или помочь настроить порог/фильтрацию по имени процесса.
А зачем так сложно? <br/> <code>kill -9  &lt;список процессов через пробел&gt;</code> <br/> <br/> <pre><code>kill -9 `ps ahux --sort=-c | awk '{if($3&gt;80.0)printf" %d "`</code></pre> <br/> <br/> И зачем использовать killall? Он же убьёт все процессы с таким именем, а не только того кто свопит.
килять процессы по PIDу - имя знать незачем
Похожие вопросы