Является ли функция kill
в Linux синхронной? Скажем, я программно вызываю функцию kill
для завершения процесса, будет ли он возвращаться только тогда, когда намеченный процесс будет завершен, или просто отправит сигнал и вернется. Если это так, как я могу заставить его ждать, пока запустится планируемый процесс?
Функция kill является синхронной?
Ответ 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.