выполнение приложенияв в linux из демона.

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Ответить
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

выполнение приложенияв в linux из демона.

Сообщение Attid »

не понимаю как это все работает =(

значит запускаю демона так :

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

   { daemonize }
   pid := fpFork;
   Case pid of
      0 : Begin { we are in the child }
         { close standard error и прочее}
      End;
      -1 : secs := 0;     { forking error, so run as non-daemon }
      Else Halt;          { successful fork, so parent dies }
   End;

ниже обработка сигналов и прочий код

значит если я ниже запущу fpFork он мне всегда будет возрощать 0
но если ниже по коду я вызываю
ExecuteProcess
который в свою очередь делает тоже самое

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

  pid:=fpFork;
  if pid=0 then
   begin
     {The child does the actual exec, and then exits}
      fpexecl(Path,Comline);
     { If the execve fails, we return an exitvalue of 127, to let it be known}
     fpExit(127);
   end
  else
   if pid=-1 then         {Fork failed}
    begin
      e:=EOSError.CreateFmt(SExecuteProcessFailed,[Path,-1]);
      e.ErrorCode:=-1;
      raise e;
    end;


соответственно с моего предстовления он никогда не должен дойти до этого кода, но работает =/
или Fork не просто создает копию процесса а еще и передает точку входа в эту копию и соответственно сколько раз вызовов Fork столько точек входа ? чтот совсем запутолся, пошел ка я до дому.
Аватара пользователя
Alexander
энтузиаст
Сообщения: 888
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

После форка указатель команд указывает на следующую после форка
команду в обоих процессах. Различить друг друга могут только по pid.
Процессы порождённые форком - самостоятельные задачи с точки зрения
процессора.
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

еще вопрос, как определить пид нового процесса из предка ?
видел команды определения родительского пида, а вот пида ребенка нет =/

а вообще интересно там все сделано =) мне начинает линукс нравится =) с программистской точки зрения.

ой что-то я стормазил, =) он fork же и возрощает его =/
Ответить