Hi!
Очевидно, что произвольный процесс может "навечно" заблокироваться
на выполнении системного вызова при определенных условиях.
Простейшие примеры - read, select, epoll_wait, futex.
Возникла очень просто формулируемая задача, простое решение которой
в голову не приходит.
Имеем процесс с определенным PID'ом.
Требуется определить, висит ли данный процесс на каком-либо системном
вызове или нет.
Критерием зависания будем считать выполнение системного вызова более
некоторого таймаута (например T=30 секунд).
Таким образом, если процесс закончил выполнение хотя бы одного
системного вызова, то считаем, что он не висит.
Если же за время наблюдения T процесс так и не завершил выполнение
системного вызова, то считаем, что он висит.
Понятное дело, что процесс может вообще не выполнять никаких системных
вызовов долгое время (например при долгих вычислениях).
Также очевидно, что процесс может получить сигнал, обработать его и
перезапустить системный вызов, обнаружив EINTR.
Все это можно игнорировать.
Есть идеи как решить данную проблему?
P.S.
Все решения, приходящие в голову, так или иначе построены вокруг
strace и ее реализации.
Мне они не очень нравятся, но если альтернатив не будет, придется
использовать.



Ответ на:
комментарий
от Liosha_Syrnikov


Ответ на:
комментарий
от bvvv

Ответ на:
комментарий
от bvvv

Ответ на:
комментарий
от Liosha_Syrnikov

Ответ на:
комментарий
от idle

Ответ на:
комментарий
от Krivenok_Dmitry

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Выполнение системных вызовов чтения. (2016)
- Форум Может ли процесс заснуть посредине выполнения системного вызова? (2003)
- Форум Quiz для профф. Pay attention, please. (2023)
- Форум Системные вызовы (2020)
- Форум Подмена системных вызовов (2010)
- Форум Блокирующие системные вызовы (2015)
- Форум Прототипы системных вызовов (2013)
- Форум Реализация системного вызова ? (2008)
- Форум Распознание системного вызова (2003)
- Форум Перехват системных вызовов (2019)