Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Параллельное программирование / С под Linux  (Прочитано 432 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Fatosha

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Код: C
  1. pid_t hackers_generator, serfs_generator;       //Processes for generator
  2.  
  3.     hackers_generator = fork();
  4.  
  5.     if(hackers_generator == 0)
  6.     {
  7.         hackers_procces();
  8.     }
  9.  
  10.     serfs_generator = fork();
  11.     if(serfs_generator == 0)
  12.     {
  13.         serfs_process();
  14.     }
  15.  

Создаю процесс "hackers_generator", потом сразу создаю процесс " serfs_generator", но он создается дважды, как можно сделать так, что бы было созданно только 2 процесса, а не 3?

Старайтесь добавлять код в текст сообщения не прибегая к сторонним сервисам, за исключением очень большого кода.
« Последнее редактирование: 15 Апрель 2014, 12:26:07 от Чистый »

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 715
    • Просмотр профиля
Re: Параллельное программирование / С под Linux
« Ответ #1 : 15 Апрель 2014, 10:27:18 »
Попробовал твой код
Код: C
  1. #include <sys/types.h>
  2. #include <unistd.h>
  3.  
  4. int main() {
  5.   pid_t hackers_generator, serfs_generator;       //Processes for generator
  6.    
  7.   hackers_generator = fork();
  8.    
  9.   if(hackers_generator == 0)
  10.   {
  11.       execl("a", NULL);
  12.   }
  13.  
  14.   serfs_generator = fork();
  15.   if(serfs_generator == 0)
  16.   {
  17.       execl("b", NULL);
  18.   }
  19. };
  20.  

После выполнения получил два процесса
u@s:~/C# ps
  PID TTY          TIME CMD
21602 pts/1    00:00:00 bash
22223 pts/1    00:00:00 a
22224 pts/1    00:00:00 b
22226 pts/1    00:00:00 ps

Оффлайн Чистый

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3474
  • nix - вот оно счастье...
    • Просмотр профиля
Re: Параллельное программирование / С под Linux
« Ответ #2 : 15 Апрель 2014, 12:24:51 »
а как же процесс который форкается ? ты сделал два форка значит процесса всего три, первоначальный который ты запускаешь и те которые форкаются а и b
Тестовый репозиторий kdeNeur ppa:devcode/kdeneur
各々が死ぬことをどのように決定する

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 715
    • Просмотр профиля
Re: Параллельное программирование / С под Linux
« Ответ #3 : 15 Апрель 2014, 12:46:20 »
Как видно из кода, мой основной процесс завершается после форков.
Вопрос у ТС был
Цитировать
потом сразу создаю процесс "serfs_generator", но он создается дважды

Оффлайн Чистый

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3474
  • nix - вот оно счастье...
    • Просмотр профиля
Re: Параллельное программирование / С под Linux
« Ответ #4 : 15 Апрель 2014, 13:21:50 »
aSmile,
Да согласен, но и ТС не показал как он проверял  наличие двух процессов, так же не понятно что творит в функциях которые вызываются в форках
Тестовый репозиторий kdeNeur ppa:devcode/kdeneur
各々が死ぬことをどのように決定する

 

Страница сгенерирована за 0.064 секунд. Запросов: 24.