Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> getpid - retrun value? 
V
    Опции темы
PhantomMaster
  Дата 3.8.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сразу извиняюсь если кому-то вопрос покажется глупым или неактуальным. Но я просто впервые пишу что-то серьёзное под никса ( hello world и реализации алгоритмов не в счёт ). Суть программы - даймон. Платформа FreeBSD 6.

Для ознакомления с принципами програмирования использовал чужие сорсы.  И наткнулся на такую реализацию:
Код

    if (getpid()!=1){
        i=fork();
        if (i<0) {perror("cannont fork"); exit (-1);} /* fork error */
        if (i>0) exit (0);/* parent exits */
        /*
            переход в фоновый режим
        */
    }
    for(int i=0;i<16;i++)
        signal(i,sigger);


Код выполняется в начале программы. Есть только один вопрос. При каких условиях getpid() возвращает 1? Можно с примером. Просто прочитав мануал нашёл только инфо, о том что ни одно значение не зарезервировано как ошибочное, и  что функция всегда успешна. 
Я конечно понимаю, что моя прога работает даже если просто выкинуть этот if, но у меня есть желание разобраться во всех моментах.
Заранее благодарен.
О себе: опыт разработки софта под никсы около 2-х месяцев, до этого писал только под форточки.
Допустимы и даже приветствуются ссылки на мануалы, референсы на английском и русском языках.

Это сообщение отредактировал(а) PhantomMaster - 8.8.2006, 21:52
PM MAIL   Вверх
bilbobagginz
Дата 3.8.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


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

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



вопрост интересный.... но не очень. как тебе должно быть понятно, что getpid() возвращает номер идентификатора процесса, т.е. PID. 
единственный процесс в системе с таким PID'ом  - init. он должен быть один-единственный.
t.e., Если каким-то образом этот код влезет в init, if будет false.

пока.





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


Новичок



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

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



спс. то что это init я догадался проверив команду 
#kill 1
результат как говорится на лицо. меня интересует есть ли вариант, когда клиентская программа получит такое значение? или объясните о чём думал автор когда делал такой if.

Это сообщение отредактировал(а) PhantomMaster - 3.8.2006, 17:30
PM MAIL   Вверх
bsa
Дата 4.8.2006, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 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
PM   Вверх
GrayCardinal
Дата 4.8.2006, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



bsa, 
под линем 2.6.x kill -9 1 тоже не срабатывает  smile

Добавлено @ 18:37 
По сабжу - по похоже что кусок выдран из кода какого-нибудь шелла, который предполагается запускать вместо обычного "init". К примеру bash или sash могут так делать  smile Вот для такой ситуации и написан этот иф. Там по-логике инициализация должна быть совсем другая...



Это сообщение отредактировал(а) GrayCardinal - 4.8.2006, 18:38


--------------------
PM MAIL WWW   Вверх
PhantomMaster
Дата 5.8.2006, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



bsa,
у меня kill 1 привёл к перезагрузки BSD. то есть она вывела несколько системных сообщений, а потом попросила заново залогинеться.

GrayCardinal, 
кусок кода выдран из chat-daemon'a. и в случае если прога получает pid1 то она не уходит в фон как бы и больше никаких отличий в работе программы.
PM MAIL   Вверх
GrayCardinal
Дата 5.8.2006, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



PhantomMaster, 
Ну понятно, если ее вместо init запустить, и вывести в фон, то система грохнется, ибо произойдет возвращение из init... А так теоретически можно юзить под голым ядром...


--------------------
PM MAIL WWW   Вверх
PhantomMaster
Дата 6.8.2006, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



GrayCardinal, 
Спасибо за пояснения! Наврено это как раз то что я и хотел услышать!

Сабж снят!
PM MAIL   Вверх
GrayCardinal
Дата 8.8.2006, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



PhantomMaster, 
Да не за что smile Там "пометить вопрос решеным" ткните, плиз  smile 


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




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


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

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