Ответ
Для поиска и принудительного завершения процессов по имени или части командной строки используются утилиты 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 — это не вежливое «извините, закройте дверь», а пинок под зад с лестницы. Процесс не успеет ничего сохранить, файлы могут остаться открытыми, соединения — висеть. Используй это только когда уже всё, терпения ноль ебать, и обычные способы не работают. А то потом будешь сидеть и думать: «И чего это база данных не отвечает? А, блядь, я же её процесс нахер убил!»