Является ли функция kill синхронной? - PullRequest
18 голосов
/ 06 января 2012

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

Ответы [ 4 ]

19 голосов
/ 06 января 2012

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

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

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

Чтобы дождаться окончания процесса:

while kill -0 PID_OF_THE_PROCESS 2>/dev/null; do sleep 1; done
4 голосов
/ 06 января 2012

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

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

3 голосов
/ 06 января 2012

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

2 голосов
/ 06 января 2012
  1. Нет. man 2 kill
  2. man wait

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...