![]() |
|
Модераторы: xvr |
![]()
|
|
| PhantomMaster |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 21.7.2006 Репутация: нет Всего: нет |
Сразу извиняюсь если кому-то вопрос покажется глупым или неактуальным. Но я просто впервые пишу что-то серьёзное под никса ( hello world и реализации алгоритмов не в счёт ). Суть программы - даймон. Платформа FreeBSD 6.
Для ознакомления с принципами програмирования использовал чужие сорсы. И наткнулся на такую реализацию:
Код выполняется в начале программы. Есть только один вопрос. При каких условиях getpid() возвращает 1? Можно с примером. Просто прочитав мануал нашёл только инфо, о том что ни одно значение не зарезервировано как ошибочное, и что функция всегда успешна. Я конечно понимаю, что моя прога работает даже если просто выкинуть этот if, но у меня есть желание разобраться во всех моментах. Заранее благодарен. О себе: опыт разработки софта под никсы около 2-х месяцев, до этого писал только под форточки. Допустимы и даже приветствуются ссылки на мануалы, референсы на английском и русском языках. Это сообщение отредактировал(а) PhantomMaster - 8.8.2006, 21:52 |
|||
|
||||
| bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 4 Всего: 317 |
вопрост интересный.... но не очень. как тебе должно быть понятно, что getpid() возвращает номер идентификатора процесса, т.е. PID.
единственный процесс в системе с таким PID'ом - init. он должен быть один-единственный. t.e., Если каким-то образом этот код влезет в init, if будет false. пока. -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
| PhantomMaster |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 21.7.2006 Репутация: нет Всего: нет |
спс. то что это init я догадался проверив команду
#kill 1 результат как говорится на лицо. меня интересует есть ли вариант, когда клиентская программа получит такое значение? или объясните о чём думал автор когда делал такой if. Это сообщение отредактировал(а) PhantomMaster - 3.8.2006, 17:30 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
PhantomMaster, у тебя kill 1 произвел какое-то действие на FreeBSD?!? Мы с другом пытались его убить на BSD, но даже kill -9 1 не помог. Ощущение, что система эти команды просто игнорировала.
Очень просто. Не знаю, как на *BSD, но на Linux можно ядру передать параметр, где искать инит (vmlinuz init=/bin/bash, например). После инициализации, ядро выполнит указанную программу и она получит PID=1 и должна будет выполнять обязанности инита. В частности, указанный в скобках пример помогает устанавливать пароль рута. ;) Это сообщение отредактировал(а) bsa - 4.8.2006, 17:48 |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
bsa,
под линем 2.6.x kill -9 1 тоже не срабатывает Добавлено @ 18:37 По сабжу - по похоже что кусок выдран из кода какого-нибудь шелла, который предполагается запускать вместо обычного "init". К примеру bash или sash могут так делать Это сообщение отредактировал(а) GrayCardinal - 4.8.2006, 18:38 |
|||
|
||||
| PhantomMaster |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 21.7.2006 Репутация: нет Всего: нет |
bsa,
у меня kill 1 привёл к перезагрузки BSD. то есть она вывела несколько системных сообщений, а потом попросила заново залогинеться. GrayCardinal, кусок кода выдран из chat-daemon'a. и в случае если прога получает pid1 то она не уходит в фон как бы и больше никаких отличий в работе программы. |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
PhantomMaster,
Ну понятно, если ее вместо init запустить, и вывести в фон, то система грохнется, ибо произойдет возвращение из init... А так теоретически можно юзить под голым ядром... |
|||
|
||||
| PhantomMaster |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 21.7.2006 Репутация: нет Всего: нет |
GrayCardinal,
Спасибо за пояснения! Наврено это как раз то что я и хотел услышать! Сабж снят! |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
PhantomMaster,
Да не за что |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |