Подтвердить что ты не робот

Функция kill является синхронной?

Является ли функция kill в Linux синхронной? Скажем, я программно вызываю функцию kill для завершения процесса, будет ли он возвращаться только тогда, когда намеченный процесс будет завершен, или просто отправит сигнал и вернется. Если это так, как я могу заставить его ждать, пока запустится планируемый процесс?

4b9b3361

Ответ 1

Нет, поскольку он ничего не убивает, он посылает сигнал только процессу.

По умолчанию этот сигнал может быть заблокирован или проигнорирован.

Вы не можете заблокировать kill -9, который представляет отправку SIGKILL

Ожидание завершения процесса процесса:

while kill -0 PID_OF_THE_PROCESS 2>/dev/null; do sleep 1; done

Ответ 2

kill не может быть синхронным, поскольку он только посылает сигнал. Целевой процесс может игнорировать входящие сигналы (см. SIG_IGN), поэтому нет гарантии относительно эффекта kill.

Нетрудно сделать эксперимент, проверяющий эту гипотезу. Запустите процесс A и сделайте его обработкой SIGTERM с 10-секундным сном перед смертью. Затем запустите процесс B, который поставляет SIGTERM в и немедленно выйдет.

Ответ 3

Системный вызов kill не ждет, пока другой процесс ничего не сделает. Сигнал отправляется в целевой процесс, и системный вызов возвращается. Целевой процесс уведомляет сигнал, когда он планируется запустить.

Ответ 4

  • Нет. man 2 kill
  • man wait

См. также man 7 signal для получения дополнительной информации об сигналах Unix.