Важная информация
Показано с 1 по 2 из 2

Тема: Си, порождение процессов с fork в Linux

  1. #1 Си, порождение процессов с fork в Linux 
    Новичок
    Регистрация
    11.04.2018
    Сообщений
    1
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Процесс 1 порождает 7 потомков. Три из них делают, какое то действие, неважно какое
    Помогите исправить
    C Code:
    1. #include <sys/types.h>
    2. #include <fcntl.h>
    3. #include <stdio.h>
    4. #include <unistd.h>    
    5. #include <stdlib.h>    
    6. void main(void)
    7. { int pid2, pid3, st;
    8. [Ссылки могут видеть только зарегистрированные пользователи. ]("Process 1, pid = %d:\n", getpid());
    9. pid2 = fork();
    10. if (pid2 == 0)
    11. { [Ссылки могут видеть только зарегистрированные пользователи. ]("Process 2, pid = %d:\n", getpid());
    12. pid3 = fork();
    13. if (pid3 == 0)
    14. { [Ссылки могут видеть только зарегистрированные пользователи. ]("Process 3, pid = %d:\n", getpid());
    15. sleep(2);
    16. [Ссылки могут видеть только зарегистрированные пользователи. ]("Process 3: end\n");
    17. }
    18. if (pid3 < 0) [Ссылки могут видеть только зарегистрированные пользователи. ]("Cann't create process 3: error %d\n", pid3);
    19. wait(&st);
    20. [Ссылки могут видеть только зарегистрированные пользователи. ]("Process 2: end\n");
    21. }
    22. else
    23. { if (pid2 < 0) [Ссылки могут видеть только зарегистрированные пользователи. ]("Cann't create process 2: error %d\n", pid2);
    24. wait(&st);
    25. [Ссылки могут видеть только зарегистрированные пользователи. ]("Process 1: end\n");
    26. }
    27. [Ссылки могут видеть только зарегистрированные пользователи. ](0);    
    28. }
    Последний раз редактировалось rrrFer; 07.05.2018 в 10:11.
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для rrrFer
    Регистрация
    01.08.2013
    Сообщений
    508
    Сказал(а) спасибо
    28
    Поблагодарили 186 раз(а) в 131 сообщениях
    Так что-ли?

    C++ Code:
    1. void do_something(int i) {
    2.   printf("\n%d - %d: do something\n", i, getpid());
    3. }
    4.  
    5. void do_nothing(int i) {
    6.   printf("\n%d - %d: do nothing\n", i, getpid());
    7. }
    8.  
    9. typedef void (*do_ptr)(int);
    10.  
    11. int main() {
    12.   const int np = 7, workers = 3;
    13.   do_ptr do_ptrs[np];
    14.   
    15.   for (int i = 0; i < np; ++i) {
    16.     do_ptrs[i] = i < workers ? do_something : do_nothing;
    17.     
    18.     int pid = fork();
    19.     if (pid == -1) {
    20.       printf("\nCann't create process № %d\n", i);
    21.       exit(0);
    22.     }
    23.     if (pid == 0) {
    24.       do_ptrs[i](i);
    25.       break;
    26.     }
    27.     else {
    28.       // parent process
    29.     }
    30.   }
    31.   sleep(1);
    32. }


    Создавать все эти потоки вручную как-то странно. Цикл же использовать можно.
    [Ссылки могут видеть только зарегистрированные пользователи. ] // программирование на Prolog, Erlang, C++
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  3. 2 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (07.05.2018), Free Admin (07.05.2018)

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Сервер под linux
    от swani013 в разделе C/C++
    Ответов: 1
    Последнее сообщение: 15.02.2015, 09:00
  2. Ищу сисадмина Linux
    от Arina в разделе Архив
    Ответов: 2
    Последнее сообщение: 17.06.2014, 12:43
  3. Linux в кармане
    от Gnosis в разделе Операционные системы
    Ответов: 8
    Последнее сообщение: 24.01.2012, 11:07
  4. Проблема с Linux
    от Маня в разделе Операционные системы
    Ответов: 2
    Последнее сообщение: 07.06.2011, 13:51
  5. QBasic в Linux
    от pingvin в разделе QBasic
    Ответов: 8
    Последнее сообщение: 11.03.2011, 10:13
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •