Я реализую модуль, который действует как fifo, чтобы предотвратить доступ двух процессов к буферу, который используется для чтения/записи i использовал семафор, когда семафор блокирует процесс, он перемещает его в очередь ожидания, мой вопрос в том, как я могу проверить, если в то время как этот процесс , ожидающий, он получил сигнал, потому что если бы это произошло, я бы хотел остановить то, что когда-либо было процесс (чтение или запись) и возврат ошибки. Единственная функция, с которой я знаком, это sigpending (sigset_t * set), но я не уверен, как ее использовать, любая помощь будет оценена. (когда я говорю чтение/записи я имею в виду функцию, которая была реализована в модуле в щеголях)Как я могу проверить, получил ли процесс сигнал, когда он находится в очереди ожидания linux 2.4
1
A
ответ
1
Чтобы разрешить спящую задачу разбудить, когда он принимает сигнал, установить состояние задачи в TASK_INTERRUPTIBLE
вместо TASK_UNINTERRUPTIBLE
. Такое пробуждение сигнала происходит полностью независимо от ожидающих очередей, поэтому его необходимо проверить отдельно (с помощью signal_pending()
).
Типичный цикл ожидания выглядит следующим образом:
DECLARE_WAITQUEUE(entry, current);
...
if (need_to_wait) {
add_wait_queue(&wq, &entry);
for (;;) {
set_current_state(TASK_INTERRUPTIBLE);
if (!need_to_wait)
break;
schedule();
if (signal_pending(current)) {
remove_wait_queue(&wq, &entry);
return -EINTR; /* or -ERESTARTSYS */
}
}
set_current_state(TASK_RUNNING);
remove_wait_queue(&wq, &entry);
}
....
Смежные вопросы
- 1. Как процесс узнает, что он получил сигнал
- 2. Как проверить, находится ли процесс в зависании (Linux)
- 3. Когда процесс обрабатывает сигнал
- 4. Процесс JBossAS получил сигнал KILL
- 5. Как проверить, работает ли процесс в Linux?
- 6. jvm: можно ли узнать, что процесс завершается из-за OOM, когда он находится в режиме ожидания?
- 7. Hudson job включается и отключается, когда он находится в очереди
- 8. Как проверить, находится ли приложение в ожидании
- 9. Как проверить, находится ли задача уже в очереди python?
- 10. В Linux/C++ ли сигнал, отправленный в поток/процесс, активируется?
- 11. Как я могу отправить сигнал на процесс popen'ed в Perl?
- 12. Как я могу проверить, находится ли я в верхнем кадре?
- 13. Как проверить, находится ли задание в очереди Laravel?
- 14. Завершить работу JENKINS, когда он находится в состоянии ожидания
- 15. Как проверить, находится ли iphone в режиме ожидания?
- 16. Учитывая идентификатор процесса, могу ли я узнать, получил ли он кэш-память CPU недавно?
- 17. Как проверить, находится ли файл в очереди загрузчика?
- 18. Как проверить, что ActiveJob находится в очереди?
- 19. проверить, не работает ли процесс linux shell
- 20. проверить, существует ли java-процесс в linux
- 21. Могу ли я установить приложение для запуска, когда устройство находится в режиме ожидания на iOS?
- 22. Как я могу слушать запущенный процесс Linux?
- 23. Когда процесс вызывает функцию сна, он излучает сигнал?
- 24. iphone daemon NSTimer интервал, когда он находится в режиме ожидания
- 25. Блокировка очереди ожидания в C
- 26. Как я могу отправить сигнал определенному ребенку, чтобы он закончил
- 27. Как проверить, завершен ли процесс?
- 28. Как проверить, является ли процесс системным процессом в Linux?
- 29. В режиме ядра Linux, как я могу определить процесс?
- 30. В GNU-Prolog я могу «поймать» сигнал linux?
Не может использовать более свежую версию ядра? Текущий номер 3.12.7 и 2.4 был выпущен в 2006 году. –
нет, это часть моей домашней работы, и мне нужно использовать точную версию 2.4.18-14 –