Как одной командой найти и принудительно завершить Python-процесс

Ответ

Для поиска и принудительного завершения процессов по имени или части командной строки используются утилиты pkill в Linux/macOS и taskkill в Windows.

Linux и macOS

Используйте команду pkill с флагом -f, который ищет совпадение по всей командной строке, а не только по имени процесса.

# Завершить все процессы, в командной строке которых есть 'my_script.py'
pkill -f "my_script.py"

# Использовать сигнал SIGKILL (-9) для безусловного завершения
pkill -9 -f "my_script.py"

Windows (Command Prompt или PowerShell)

Используйте taskkill с фильтром по заголовку окна или образу.

# Завершить все процессы python.exe принудительно
taskkill /F /IM python.exe

# Более точный способ: найти PID и завершить по нему
# (Это уже не одна команда, но более безопасно)
Get-Process | Where-Object { $_.ProcessName -eq 'python' -and $_.Path -like '*my_script.py*' } | Stop-Process -Force

Важно: Принудительное завершение (kill -9, pkill -9 или флаг /F в taskkill) не позволяет процессу корректно завершить свою работу (например, закрыть файлы или сетевые соединения). Используйте его, только если обычные сигналы завершения не работают.

Ответ 18+ 🔞

А, слушай, вот тебе насущная проблема — как насильно прибить процесс, который заебался и не хочет закрываться. Термины оставим как есть, а то потом накосячишь, но суть объясню по-человечески.

В линуксе и маке есть такая команда — pkill. Она как тот мент, который ищет тебя по всему району. Если добавить флаг -f, она будет шариться не только по имени процесса, а по всей его командной строке. То есть, если у тебя скрипт my_script.py засел в памяти как сука-таракан, пишешь:

pkill -f "my_script.py"

А если он совсем упёртый, как мой сосед по даче, который не слышит, когда его зовут ужинать, — тогда уже сигнал SIGKILL, он же -9. Это как топором по башке:

pkill -9 -f "my_script.py"

На винде всё, как обычно, через жопу. Там своя банда — taskkill. Хочешь прикончить все процессы python.exe? Без проблем, нахуй:

taskkill /F /IM python.exe

Но это, блядь, как из пушки по воробьям — убьёшь всё, что похоже. Если хочешь прицельно, то уже в PowerShell надо немного пошаманить:

Get-Process | Where-Object { $_.ProcessName -eq 'python' -and $_.Path -like '*my_script.py*' } | Stop-Process -Force

Важный момент, ёпта! Сигнал -9 или флаг /F — это не вежливое «извините, закройте дверь», а пинок под зад с лестницы. Процесс не успеет ничего сохранить, файлы могут остаться открытыми, соединения — висеть. Используй это только когда уже всё, терпения ноль ебать, и обычные способы не работают. А то потом будешь сидеть и думать: «И чего это база данных не отвечает? А, блядь, я же её процесс нахер убил!»