Сообщить об ошибке.

Функция kill() модуля os в Python

Послать сигнал процессу или группе процессов

Синтаксис:

import os

os.kill(pid, sig)
os.killpg(pgid, sig)

Параметры:

Возвращаемое значение:

  • None

Вызывает событие аудита os.killpg с аргументами pgid, sig.

Описание:

Функция kill() модуля os посылает сигнал sig процессу pid. Константы для конкретных сигналов, доступных на хост-платформе, определяются в модуле signal.

Функция os.kill() событие аудита os.kill с аргументами pid, sig.

Функция killpg() посылает сигнал sig в группу процессов pgid. Константы для конкретных сигналов, доступных на хост-платформе, определяются в модуле signal.

Функция os.killpg() событие аудита os.killpg с аргументами pgid, sig.

Windows: сигналы signal.CTRL_C_EVENT и signal.CTRL_BREAK_EVENT являются специальными сигналами, которые могут отправляться только в консольные процессы, которые совместно используют общее окно консоли, например некоторые подпроцессы. Любое другое значение для sig приведет к безоговорочному завершению процесса API-интерфейсом TerminateProcess, а для кода выхода будет установлено значение sig. Версия os.kill() для Windows дополнительно использует дескрипторы процессов для уничтожения.

Смотрите также signal.pthread_kill().

Примеры использования:

Родитель может отправлять сигналы дочернему процессу, используя функцию os.kill() используя модуль signal. В этом примере используется короткая пауза, чтобы дать дочернему процессу время для настройки обработчика сигнала. Реальное приложение, не будет нуждаться в вызове time.sleep(). В дочернем процессе установим обработчик сигнала и сделаем небольшую паузу, чтобы предоставить родительскому процессу достаточно времени для отправки сигнала.

import os
import signal
import time

def signal_usr1(signum, frame):
    "Обратный вызов вызывается при получении сигнала"
    pid = os.getpid()
    print(f'Получен USR1 в процессе {pid}')

print('Forking...')
child_pid = os.fork()
if child_pid:
    print('PARENT: Пауза перед отправкой сигнала ...')
    time.sleep(1)
    print(f'PARENT: передача сигналов {child_pid}')
    os.kill(child_pid, signal.SIGUSR1)
else:
    print('CHILD: Настройка обработчика сигнала')
    signal.signal(signal.SIGUSR1, signal_usr1)
    print('CHILD: Пауза в ожидании сигнала')
    time.sleep(5)

# $ python3 test_kill.py
# Forking...
# PARENT: Пауза перед отправкой сигнала ...
# CHILD: Настройка обработчика сигнала
# CHILD: Пауза в ожидании сигнала
# PARENT: передача сигналов 21168
# Получен USR1 в процессе 21168