The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Как сделать что бы демон запускал другую програмку?"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Как сделать что бы демон запускал другую програмку?"
Сообщение от Сергей emailИскать по авторуВ закладки on 17-Авг-01, 14:10  (MSK)
Проблемма вот в чем :
нужно что бы демон во время своей работы
запускал другое приложение, ждал когда оно отработает. Но если просто написать system("...");
то ничего не запускается ... говорят что нужно порождать fork'oм дочерний процесс и тот уже в свою очередь ..? немогли бы мне обьяснить зачем это надо ? и как правильно это сделать.
спасибо.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: Как сделать что бы демон запускал другую програмку?"
Сообщение от ivo emailИскать по авторуВ закладки on 17-Авг-01, 21:31  (MSK)
system сам делает fork,exec и ждет
Скорее всего ошибка в аргументе


  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: Как сделать что бы демон запускал другую програмку?"
Сообщение от XMan Искать по авторуВ закладки on 18-Авг-01, 04:29  (MSK)
Незнаю, как system, но могу рассказать, как делать через exec.
Итак представим такую схему:

A1(fork) -> A1 (wait или waitpid)->A1 ...
|-------> A2 -> exec(...)->exit().

Пояснение:
Процесс A1 порождает процесс A2, который вызывает exec. При вызове тело процесса A2 заменяется телом программы, вызванной в exec (потому и делается fork). В это время процесс A1 уходит в режим ожидания завершения потомка A2 (wait) или делает что-то, периодически проверяя, завершился потомок A2 или нет (waitpid). Когда потомок завершается , в памяти остается только процесс A1.
wait и waitpid нужны для того, чтобы у тебя zombie-процессов не висело.
Кстати, маленькая хитрость - для вызова заранее неизвестной программы, да еще и с параметрами, делается вызов, например, /bin/sh, которому в качестве параметров передается строка с программой и ее параметрами.

Вобщем, получается что-то типа:

...
char program_name[1024];
bzero(&program_name,1024);
fgets(&program_name,1023,stdin);
int pid=fork();
if (pid > 0) {
  // родитель
  wait(pid);
} else if (pid == 0) {
  // потомок
  exec("/bin/sh","-c",program_name,0);
  // если мы попадаем сюда, то ошибка при выполнении exec
  perror("exec");
  // завершение потомка
  exit(0);
} else
  // ошибка при выполнении fork
  perror("fork");
...

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру