Является ли функция kill
в Linux синхронной? Скажем, я программно вызываю функцию kill
для завершения процесса, будет ли он возвращаться только тогда, когда предполагаемый процесс будет завершен, или просто отправит сигнал и вернется. Если это так, как я могу заставить его ждать, пока задуманный процесс будет убит?Является ли функция kill синхронной?
ответ
Нет, поскольку он ничего не убивает, он посылает сигнал только процессу.
По умолчанию этот сигнал может быть заблокирован или проигнорирован.
Вы не можете блокировать kill -9
, который представляет собой отправку SIGKILL
Ждать процесс, чтобы умереть:
while kill -0 PID_OF_THE_PROCESS 2>/dev/null; do sleep 1; done
+1 для показа простого метода ожидания до исчезновения pid. –
SIGKILL не может быть заблокирован или проигнорирован процессом. Но вы правы, что процесс не прекратится немедленно. Если процесс выполняет системный вызов, он заканчивается только при возврате системного вызова. Поэтому, если это действительно тяжелая обработка, это может занять некоторое время. – ugoren
Он также откажется умереть, если он находится в состоянии 'UNINTERRUPTIBLE' –
уничтожений системный вызов не ждать, пока другой процесс, чтобы сделать что-нибудь. Сигнал отправляется в целевой процесс, и системный вызов возвращается. Целевой процесс уведомляет сигнал, когда он планируется запустить.
kill
не может быть синхронным, поскольку он только посылает сигнал. Целевой процесс может игнорировать входящие сигналы (см. SIG_IGN
), поэтому нет гарантии относительно эффекта kill
.
Непросто провести эксперимент, проверяя эту гипотезу. Начните процесс A и сделайте его обработкой SIGTERM
с 10-секундным сном перед смертью. Затем запустите процесс B, который доставит SIGTERM
в A и немедленно выйдет.
- Номер
man 2 kill
man wait
Смотрите также man 7 signal
для более подробной информации о сигналах Unix.
- 1. Является ли функция Stylus render синхронной?
- 2. Как узнать, является ли функция асинхронной или синхронной в node.js?
- 3. Функция Javascript Kill?
- 4. функция kill возвращает неверный аргумент
- 5. Как определить, является ли веб-служба асинхронной или синхронной.
- 6. Является ли независимой от асинхронной и синхронной ОС ввода-вывода?
- 7. Является ли обработка привязки в Knockout.js 2.3 синхронной?
- 8. Как моя асинхронная функция fs.ReadFile становится синхронной?
- 9. Является ли функция потокобезопасной?
- 10. Функция kill из ISR на cortex-m0
- 11. функции синхронной угловой функции
- 12. Изменить kill-line для удаления строки Функция
- 13. Микросинхроны синхронной связи
- 14. Является ли табличная функция обновляемой
- 15. Является ли функция() {} истинным quine?
- 16. Является ли встроенная функция атомной?
- 17. Является ли самонастраивающаяся функция плохой?
- 18. Является ли функция $ $ в haskell?
- 19. Является ли функция CreateToolhelp32Snapshot безопасной?
- 20. Является ли функция действительно объектом
- 21. Является ли функция примером инкапсуляции?
- 22. Является ли следующая функция рекурсивной?
- 23. Является ли эта функция строкой?
- 24. Является ли функция редукции перепиской?
- 25. Является ли функция main() повторной?
- 26. Является ли каждая функция закрытием?
- 27. Является ли чистая функция идемпотентной?
- 28. Является ли функция simhash надежной?
- 29. kill -INT vs kill -TERM
- 30. Функция JavaScript для синхронной очистки HTML и JS
Анекдотически я могу сказать «нет», так как я использовал «kill» в процессе, чтобы он возвращался и все еще присутствовал. Затем нужно было сделать «kill -9». –
Примечание: не все сигналы, которые вы можете отправить процессу *, * завершат его, даже «kill 1234» (используя «SIGTERM») могут быть захвачены и обойдены. Единственный способ безусловного убийства - использовать «kill -9», что довольно жестоко (нет возможности для очистки). – Piskvor
Даже «kill -9» всегда убивает его немедленно, так как есть некоторые состояния (в частности, состояние «D»), в которых он не умрет, пока нить ядра, связанная с ним, не завершится. –