Привет, всем. Есть такая проблема:
Известен id процесса. Требуется с помощью другого процесса определить, завис он или нет.
Конечно, вопрос немного некорректный, но требуется, собственно, определить и формализовать понятие "зависание".
Кто-нибудь может подкинуть хотя-бы идеи?
Заранее спасибо.
Проблема зависания процессов в UNIX
Модератор: Модераторы разделов
-
Zeus
- Сообщения: 694
Re: Проблема зависания процессов в UNIX
c++proger писал(а): ↑02.09.2006 02:02Привет, всем. Есть такая проблема:
Известен id процесса. Требуется с помощью другого процесса определить, завис он или нет.
Конечно, вопрос немного некорректный, но требуется, собственно, определить и формализовать понятие "зависание".
Кто-нибудь может подкинуть хотя-бы идеи?
Заранее спасибо.
Наверное завис - это перестал обрабатывать входные данные и/или перестал выдавать что нужно на выход.
Без знания внутренностей программы, без анализа её входа-выхода или без внедрения в неё какого-то watchdog'а, ТОЛЬКО ps'ом имхо внутреннее состояние программы не определишь.
-
backslash
- Сообщения: 125
Re: Проблема зависания процессов в UNIX
Полностью решить невозможно. Как классифицировать следующие состояния? (воспользовался Си для удобства) -
Код: Выделить всё
while (1) { sleep(5); }Код: Выделить всё
while (1) {;}Код: Выделить всё
while (1) { if (0==random()) then break; else sleep(5); }-
fatboy
- Сообщения: 156
- ОС: Zenwalk Linux, Windows XP
Re: Проблема зависания процессов в UNIX
backslash писал(а): ↑02.09.2006 09:19Полностью решить невозможно. Как классифицировать следующие состояния? (воспользовался Си для удобства) -Код: Выделить всё
while (1) { sleep(5); }Код: Выделить всё
while (1) {;}Код: Выделить всё
while (1) { if (0==random()) then break; else sleep(5); }
1. Ожидание
2. Зависание
3. Ожидание (хотя можно было и красивее записать)
Имхо, это должен быть или модуль ядра или программа для конкретн[ого|ых] процесс[а|ов]
Zenwalk 4.0
TOSHIBA Satellite A100
TOSHIBA Satellite A100
-
aLexx programmer
- Сообщения: 985
- Статус: Турук-Макто
- ОС: Gentoo -> Ubuntu
Re: Проблема зависания процессов в UNIX
fatboy писал(а): ↑03.09.2006 00:02backslash писал(а): ↑02.09.2006 09:19
Полностью решить невозможно. Как классифицировать следующие состояния? (воспользовался Си для удобства) -Код: Выделить всё
while (1) { sleep(5); }Код: Выделить всё
while (1) {;}
1. Ожидание
2. Зависание
Код 2 со стороны пользователя эквивалентен коду
Код: Выделить всё
while (1) { sleep(9999999); }Поэтому определить, зависание это или ожидание --- невозможно.
Естественно, это утрированный пример, на практике все ещё более неоднозначно.
-
fatboy
- Сообщения: 156
- ОС: Zenwalk Linux, Windows XP
Re: Проблема зависания процессов в UNIX
aLexx programmer писал(а): ↑03.09.2006 00:15Код 2 со стороны пользователя эквивалентен коду
Код: Выделить всё
while (1) { sleep(9999999); }
Поэтому определить, зависание это или ожидание --- невозможно.
Естественно, это утрированный пример, на практике все ещё более неоднозначно.
Классифицировал как зависание ибо нет никаких условий выхода. Т.е. ожидание с фиксированным периодом, причем очень длинным а главное - не извесно чего. И не ясно какая от этого ожидания польза.
Zenwalk 4.0
TOSHIBA Satellite A100
TOSHIBA Satellite A100
-
Liksys
- Сообщения: 2910
Re: Проблема зависания процессов в UNIX
fatboy писал(а): ↑03.09.2006 20:16aLexx programmer писал(а): ↑03.09.2006 00:15
Код 2 со стороны пользователя эквивалентен коду
Код: Выделить всё
while (1) { sleep(9999999); }
Поэтому определить, зависание это или ожидание --- невозможно.
Естественно, это утрированный пример, на практике все ещё более неоднозначно.
Классифицировал как зависание ибо нет никаких условий выхода. Т.е. ожидание с фиксированным периодом, причем очень длинным а главное - не извесно чего. И не ясно какая от этого ожидания польза.
Не факт, что это зависание. Программа, возможно, таким образом "спит". А для выхода ожидает поступления какого-то сигнала.
Зависание может (напрмер!) выглядеть, как _бесконечный_ вывод чего-либо в stderr и когда при этом он не откликается ни на один сигнал.
А вообще надо пройтись по _всем_ возможным причинам зависания и сформулировать правило для каждого случая, типа "программа тормозит так-то и так-то, значит она зависла, делать с ней то-то".
-
aLexx programmer
- Сообщения: 985
- Статус: Турук-Макто
- ОС: Gentoo -> Ubuntu
Re: Проблема зависания процессов в UNIX
(Liksys @ Sep 3 2006, в 21:03) писал(а):А вообще надо пройтись по _всем_ возможным причинам зависания и сформулировать правило для каждого случая, типа "программа тормозит так-то и так-то, значит она зависла, делать с ней то-то".
А для этого надо для каждого процесса разобрать исходники, найти в них все возможные "узкие места".... Кстати, процесс пожет зависнуть из-за кривой сборки shared library, или, вообще, из-за битой оперативки. Так что, в общем случае, задача отделения зависания от ожидания - нерешаема.