В области системного программирования может наступить момент, когда вам потребуется принудительно завершить упорный или неправильно работающий процесс. Хотя для этого существуют различные методы, один мощный и гибкий подход предполагает использование библиотеки ctypes
в Python. В этом сообщении блога мы рассмотрим различные способы завершения процесса с помощью ctypes
, а также примеры кода и пояснения. Итак, пристегнитесь и приготовьтесь стать профессионалом, убивающим процессы!
Метод 1: завершить процесс по PID
Чтобы завершить процесс по его идентификатору процесса (PID), мы можем использовать библиотеку ctypes
для вызова базовых системных функций. Вот фрагмент кода, демонстрирующий, как завершить процесс, используя его PID:
import ctypes
kernel32 = ctypes.windll.kernel32
PROCESS_TERMINATE = 0x0001
def kill_process(pid):
handle = kernel32.OpenProcess(PROCESS_TERMINATE, False, pid)
kernel32.TerminateProcess(handle, -1)
kernel32.CloseHandle(handle)
# Usage example:
pid_to_kill = 1234
kill_process(pid_to_kill)
Метод 2: Завершить процесс по имени исполняемого файла
Иногда нам может потребоваться завершить процесс на основе его имени исполняемого файла, а не его PID. Вот как мы можем добиться этого, используя ctypes
:
import ctypes
import psutil
kernel32 = ctypes.windll.kernel32
PROCESS_TERMINATE = 0x0001
def kill_process_by_name(name):
for proc in psutil.process_iter(['pid', 'name']):
if proc.info['name'] == name:
handle = kernel32.OpenProcess(PROCESS_TERMINATE, False, proc.info['pid'])
kernel32.TerminateProcess(handle, -1)
kernel32.CloseHandle(handle)
# Usage example:
executable_name = "my_process.exe"
kill_process_by_name(executable_name)
Метод 3: завершить несколько процессов по имени исполняемого файла
В некоторых случаях нам может потребоваться завершить несколько процессов с одним и тем же именем. Вот расширение предыдущего метода для завершения нескольких процессов с помощью ctypes
:
import ctypes
import psutil
kernel32 = ctypes.windll.kernel32
PROCESS_TERMINATE = 0x0001
def kill_all_processes_by_name(name):
for proc in psutil.process_iter(['pid', 'name']):
if proc.info['name'] == name:
handle = kernel32.OpenProcess(PROCESS_TERMINATE, False, proc.info['pid'])
kernel32.TerminateProcess(handle, -1)
kernel32.CloseHandle(handle)
# Usage example:
executable_name = "my_process.exe"
kill_all_processes_by_name(executable_name)
Благодаря возможностям ctypes
в Python завершение процессов становится проще простого. В этой статье мы рассмотрели различные способы завершения процесса с помощью ctypes
, будь то по PID или по имени исполняемого файла. Вооружившись этими методами, вы теперь можете справляться с неуправляемыми процессами как профессионал. Не забывайте использовать эту власть ответственно и завершать процессы только в случае крайней необходимости. Удачной охоты за процессами!