Проблема зависания процессов в UNIX

Модератор: Модераторы разделов

c++proger
Сообщения: 1
ОС: LINUX

Проблема зависания процессов в UNIX

Сообщение c++proger »

Привет, всем. Есть такая проблема:
Известен id процесса. Требуется с помощью другого процесса определить, завис он или нет.
Конечно, вопрос немного некорректный, но требуется, собственно, определить и формализовать понятие "зависание".
Кто-нибудь может подкинуть хотя-бы идеи?
Заранее спасибо.
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Проблема зависания процессов в UNIX

Сообщение Zeus »

c++proger писал(а):
02.09.2006 02:02
Привет, всем. Есть такая проблема:
Известен id процесса. Требуется с помощью другого процесса определить, завис он или нет.
Конечно, вопрос немного некорректный, но требуется, собственно, определить и формализовать понятие "зависание".
Кто-нибудь может подкинуть хотя-бы идеи?
Заранее спасибо.

Наверное завис - это перестал обрабатывать входные данные и/или перестал выдавать что нужно на выход.
Без знания внутренностей программы, без анализа её входа-выхода или без внедрения в неё какого-то watchdog'а, ТОЛЬКО ps'ом имхо внутреннее состояние программы не определишь.
Спасибо сказали:
backslash
Сообщения: 125

Re: Проблема зависания процессов в UNIX

Сообщение backslash »

Полностью решить невозможно. Как классифицировать следующие состояния? (воспользовался Си для удобства) -

Код: Выделить всё

while (1) { sleep(5); }

Код: Выделить всё

while (1) {;}

Код: Выделить всё

while (1) { if (0==random()) then break; else sleep(5); }
Спасибо сказали:
Аватара пользователя
fatboy
Сообщения: 156
ОС: Zenwalk Linux, Windows XP

Re: Проблема зависания процессов в UNIX

Сообщение fatboy »

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
Спасибо сказали:
Аватара пользователя
aLexx programmer
Сообщения: 985
Статус: Турук-Макто
ОС: Gentoo -> Ubuntu

Re: Проблема зависания процессов в UNIX

Сообщение aLexx programmer »

fatboy писал(а):
03.09.2006 00:02
backslash писал(а):
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

Сообщение fatboy »

aLexx programmer писал(а):
03.09.2006 00:15
Код 2 со стороны пользователя эквивалентен коду

Код: Выделить всё

while (1) { sleep(9999999); }

Поэтому определить, зависание это или ожидание --- невозможно.

Естественно, это утрированный пример, на практике все ещё более неоднозначно.

Классифицировал как зависание ибо нет никаких условий выхода. Т.е. ожидание с фиксированным периодом, причем очень длинным а главное - не извесно чего. И не ясно какая от этого ожидания польза.
Zenwalk 4.0
TOSHIBA Satellite A100
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Проблема зависания процессов в UNIX

Сообщение Liksys »

fatboy писал(а):
03.09.2006 20:16
aLexx programmer писал(а):
03.09.2006 00:15

Код 2 со стороны пользователя эквивалентен коду

Код: Выделить всё

while (1) { sleep(9999999); }

Поэтому определить, зависание это или ожидание --- невозможно.

Естественно, это утрированный пример, на практике все ещё более неоднозначно.

Классифицировал как зависание ибо нет никаких условий выхода. Т.е. ожидание с фиксированным периодом, причем очень длинным а главное - не извесно чего. И не ясно какая от этого ожидания польза.

Не факт, что это зависание. Программа, возможно, таким образом "спит". А для выхода ожидает поступления какого-то сигнала.
Зависание может (напрмер!) выглядеть, как _бесконечный_ вывод чего-либо в stderr и когда при этом он не откликается ни на один сигнал.
А вообще надо пройтись по _всем_ возможным причинам зависания и сформулировать правило для каждого случая, типа "программа тормозит так-то и так-то, значит она зависла, делать с ней то-то".
Спасибо сказали:
Аватара пользователя
aLexx programmer
Сообщения: 985
Статус: Турук-Макто
ОС: Gentoo -> Ubuntu

Re: Проблема зависания процессов в UNIX

Сообщение aLexx programmer »

(Liksys @ Sep 3 2006, в 21:03) писал(а):А вообще надо пройтись по _всем_ возможным причинам зависания и сформулировать правило для каждого случая, типа "программа тормозит так-то и так-то, значит она зависла, делать с ней то-то".

А для этого надо для каждого процесса разобрать исходники, найти в них все возможные "узкие места".... Кстати, процесс пожет зависнуть из-за кривой сборки shared library, или, вообще, из-за битой оперативки. Так что, в общем случае, задача отделения зависания от ожидания - нерешаема.
Спасибо сказали: