Модераторы: powerfox, ZeeLax

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> При демона процесса, становится zombie 
V
    Опции темы
Rickert
Дата 14.5.2007, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Есть задача: погасить демона и запустить его заново, уже с новыми настройками. При попытке убить, он переходе в состояние zombie и соотвественно запуск повторный не возможен.
Альт линукс.

ЗЫ
Я не так давно с линуксом занимаюсь, и поэтому думаю, что на самом деле кучу ещё информации должен был вам сообщить, поэтому переспросите пожалуйста и помогите разобраться.

Это сообщение отредактировал(а) Rickert - 16.5.2007, 05:34


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
bilbobagginz
Дата 14.5.2007, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 113
Всего: 317



существует не знаю насколько официальная конвенция, что процесс-демон при получении сигнала SIGHUP:
Код

/* из <bits/signum.h> линукса */
#define SIGHUP          1       /* Hangup (POSIX).  */

снова считывает конфигурационные файлы.
т.е., если демон написан корректно, его можно перестартовать при помощи сигнала hang-up:
Код

kill -HUP <ИД процесса>


удачи.



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
smalcom
Дата 15.5.2007, 03:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 494
Регистрация: 16.10.2004
Где: Dnepr

Репутация: 1
Всего: 7



бывает, что kill неснимает такие процессы тада учим команду(юзать осторожно)
killall -s KILL <name>



--------------------
What DA F...???
PM MAIL WWW Skype Jabber   Вверх
kirjanov
Дата 15.5.2007, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 22.1.2006
Где: Dark wood of erro r

Репутация: 5
Всего: 15



если состояние будет TASK_UNINTERRUPTIBLE  то не снимает ) хотя init переиодически вроде как делает переназначение зомби на себя/ 

PM MAIL   Вверх
MAKCim
Дата 15.5.2007, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 21
Всего: 207



Цитата(kirjanov @  15.5.2007,  09:32 Найти цитируемый пост)
если состояние будет TASK_UNINTERRUPTIBLE  то не снимает ) хотя init переиодически вроде как делает переназначение зомби на себя/ 

намучался я один раз с TASK_UNINTERRUPTIBLE  smile 
запустил mount CD-ROM-а, а он (CD-ROM) видно был не исправен (шли постоянные попытки чтения, которые завершались неудачно), никакой kill не помогал вырубить mount, физическое нажатие на кнопку привод тоже игнорировал... пришлось перезагружать систему 

Это сообщение отредактировал(а) MAKCim - 15.5.2007, 22:01


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Rickert
Дата 16.5.2007, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Мне нужно именно убить процесс kill'ом, а потом запустить заново, потому что используются сторонние программы, которые не факт что перчитают конфиги при перезапуске.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
bilbobagginz
Дата 16.5.2007, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 113
Всего: 317



для начала попробуй это, чтобы знать, в debug mode.

в крайнем случае, спиши один из скриптов в /etc/init.d/
и подкрути его создавать pid файлы на все процессы, а потом их убивать, и оживлять.

удачи.


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Rickert
Дата 16.5.2007, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



В частности эксперементирую сейчас над dhcpd. Он изначально в фоне стартует, если ему передать принудительно -d, а потом в фон через &, после чего убить - то всё нормально

Цитата(bilbobagginz @  16.5.2007,  09:19 Найти цитируемый пост)
для начала попробуй это, чтобы знать, в debug mode.

Как в него перейти?
Цитата(bilbobagginz @  16.5.2007,  09:19 Найти цитируемый пост)
и подкрути его создавать pid файлы на все процессы, а потом их убивать, и оживлять.

Как это сделать?

ЗЫ
init.d нету, rc.d


Бага именно в том, когда программы, которые сами в фон уходят стартуются через daemon - при убиении становятся zombie. Может какая маза с pid файлом?

Это сообщение отредактировал(а) Rickert - 16.5.2007, 11:11


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
bilbobagginz
Дата 16.5.2007, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 113
Всего: 317



в какой-то папке есть все скрипты стартования и остановки демонов.
пусть будет rc.d
возьми какой-то из них и подправь под свои нужды.

зомби это статус, когда процесс уже убит, но его ресурсы еще не уже освобождены, но "учетная записть" в таблице процессов - еще не стерта, т.е. его PID еще не может быть использован системой для создания нового процесса. запись в таблице процессов еще не стирается, пока родитель данного процесса не сделает вызов wait(PID). 
если родитель этого не делает еще, то процесс остается в статусе ZOMBIE (defunct), а если не делает вообще, то теоритически процесс может остаться так до сл. перегрузки системы.

если зомби появляются - это обычно баг в процессе родителя, само по себе - не ужос, но если система загружена тучей таких процессов, то постепенно таблица процессов ( не бесконечная штука ) заполняется этими мертвыми душами, и система не сможет создавать новые процессы - нет свободных идентификаторов PID, абсурдная патология.

для "убития" зомби, нужно убить родителя. PID родителя находится в столбце PPID в таблице ps.






--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Rickert
Дата 16.5.2007, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



bilbobagginz, народ тут думает, что возможно должны быть какие-то зависимости от других приложений.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
kirjanov
Дата 16.5.2007, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 22.1.2006
Где: Dark wood of erro r

Репутация: 5
Всего: 15



Цитата(bilbobagginz @  16.5.2007,  13:50 Найти цитируемый пост)
зомби это статус, когда процесс уже убит, но его ресурсы еще не освобождены. 

когда статус TASK_ZOMBIE - ресурсы уже освобождены, не освобожден дескриптор процесса в слябовом распределителе и структура thread_info в в стеке ядра(в 2.6.22 это чуть может отличаться)
Код

     taskstats_exit(tsk, group_dead);
920 
921         exit_mm(tsk);
922 
923         if (group_dead)
924                 acct_process();
925         exit_sem(tsk);
926         __exit_files(tsk);
927         __exit_fs(tsk);
928         exit_thread();
929         cpuset_exit(tsk);
930         exit_keys(tsk);
931 
932         if (group_dead && tsk->signal->leader)
933                 disassociate_ctty(1);
934 
935         module_put(task_thread_info(tsk)->exec_domain->module);
936         if (tsk->binfmt)
937                 module_put(tsk->binfmt->module);
938 
939         tsk->exit_code = code;
940         proc_exit_connector(tsk);
941         exit_task_namespaces(tsk);
942         exit_notify(tsk);


Это сообщение отредактировал(а) kirjanov - 16.5.2007, 19:57
PM MAIL   Вверх
bilbobagginz
Дата 17.5.2007, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 113
Всего: 317



хмм.. подправил хрень, которую сам и написал.



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Rickert
Дата 21.5.2007, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Ну хорошо, что такое zombie, само по себе  - ясно. А вопрос: как с ним бороться-то? Запускается он от init'а.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Rickert
Дата 21.5.2007, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Оказывается, init, которым пользуется наша контора, полностью переписывался одним программером, который сейчас в отпуске. Видать он не вызывает wait(PID). Приедет, будем смотреть.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
bilbobagginz
Дата 21.5.2007, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 113
Всего: 317



интересненько он init оптимизировал.... 
расскажи как потом все закончилось!




--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Rickert
Дата 21.5.2007, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



bilbobagginz, ok smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Rickert
Дата 22.5.2007, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Смотрел код init'а. Я понять не могу одной вещи. Там fork'а вообще нет. Смотрите как получается: когда мы стартуем что - либо, не из какого-либо приложения, по умолчанию pid родителя нового процесса (по сути программы), ppid, выставляется = pid'у init'а. в таком случае вопрос: что делать? smile 
В конце init'а бегает бесконечный цикл, со sleep'ом: как получить уведомление о том, что один из "детей" перешёл в состояние zombie, то бишь собирается завершиться, и соответственно, помочь ему, вызвав wait?

Это сообщение отредактировал(а) Rickert - 22.5.2007, 10:55


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
bilbobagginz
Дата 23.5.2007, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 113
Всего: 317



посмотри что такое signal.
после смерти каждого "дитяти" родитель получает SIGCHILD
нужно писАть обработчик этого сигнала.



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Rickert
Дата 23.5.2007, 04:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Сейчас посмотрим...

Это сообщение отредактировал(а) Rickert - 23.5.2007, 04:22


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Rickert
Дата 23.5.2007, 04:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Делаю так:
Код

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <glob.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <signal.h>

void sigCatch()
{
  FILE* file = fopen("/tmp/initconf.pid.log", "a+");

  pid_t pid = getpid();
  int status;

  pid = waitpid(-1, &status, 0);
  fprintf(file, "PID is catched on death\n");
  fclose(file);
}

int main(int argc, char *argv[]) {
    system("/bin/mount -n /tmp");
    system("/bin/mount -n /proc");
    system("/bin/mount -n /sys");
    system("/sbin/modprobe psmouse");
    system("/sbin/modprobe drm");
    system("/bin/umount /");
    system("/bin/mount -n -t ext2 /dev/sda2 / -o rw,remount");
    getedid();
    system("/sbin/modprobe sd_mod");
    system("/sbin/modprobe usbmouse");
    system("/sbin/modprobe usblp");
    system("mkdir /tmp/conf");
    system("/bin/bash");
    signal(SIGCHLD, sigCatch);
    
    while(1)
      sleep(1);
    
    return 0;
}


Файл /tmp/initconf.pid.log не создаётся.
То, что приведено - исходник init'а с которого грузится система.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Rickert
Дата 23.5.2007, 06:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Чувствую придётся брать исходный инит и править его руками... Аминь


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
bilbobagginz
Дата 23.5.2007, 06:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 113
Всего: 317



честно говоря дебажить не хочется этот код, но:
1. системные вызовы принято спрашивать что они вернули.
2. советуют использовать не signal, а sigaction
3. что за вызов getedid() ? ( имелось в виду getegid() ? )
4. есть стандартный init, к которому можно обратиться и посмотреть как там все написано.




--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Rickert
Дата 23.5.2007, 06:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



bilbobagginz, 
Цитата(bilbobagginz @  23.5.2007,  06:22 Найти цитируемый пост)
3. что за вызов getedid() ? ( имелось в виду getegid() ? )

Функция самописная, не обращая внимания.
Цитата(bilbobagginz @  23.5.2007,  06:22 Найти цитируемый пост)
. есть стандартный init, к которому можно обратиться и посмотреть как там все написано.

Вот, ищу исходник инита от слаки сейчас.
Что-то на http://packages.slackware.it не видать пока


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
bilbobagginz
Дата 23.5.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 113
Всего: 317



зачем вам было переписать init  ?



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Rickert
Дата 23.5.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Потому что надо ускорить загрузку ОСи. Распараллеливать процессы загрузки некоторых модулей и грузить ещё доп. ПО. Как всегда: директор заявил в документации, а программисты - мучайся smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
bilbobagginz
Дата 23.5.2007, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 113
Всего: 317



init-ng не смотрели ?


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Rickert
Дата 24.5.2007, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



bilbobagginz, что это такое? Можно по-подробнее?

Это сообщение отредактировал(а) Rickert - 24.5.2007, 06:56


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
bilbobagginz
Дата 24.5.2007, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 113
Всего: 317



Rickert, поток вопросов сам по себе дело положительное, но качество оных не на пике, поэтому начинаю острить (или выеживаться, называем как удобно).
и так на вопрос:
Цитата

bilbobagginz, что это такое? Можно по-подробнее?

ответ: нет, нельзя подробнее, это секретная информация. не раскрою.



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Rickert
Дата 24.5.2007, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Юмор оценил smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Oбщие вопросы"
nickless
Imple
nerezus

В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
Например вопросы о выборе ОС для определенных задач (но если Вы просто хотите узнать "Какой дистрибутив лучше", то для этого есть Клуб юнуксоидов).
Общие вопросы по shell-программированию тоже лучше задавать здесь.


  • Вопросы мобильной разработки тут
  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0788 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.