Advertisement
Tobiahao

S01_LAB01_04

Nov 12th, 2017
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.44 KB | None | 0 0
  1. /*
  2. Napisz program, który w zależności od wartości argumentu podanego w linii poleceń
  3. wygeneruje odpowiednią liczbę procesów potomnych, które będą się wykonywały
  4. współbieżnie. Każdy z procesów potomnych powinien wypisać 4 razy na ekranie
  5. swój PID, PID swojego rodzica oraz numer określający, którym jest potomkiem
  6. rodzica (1, 2, 3 ...), a następnie usnąć na tyle sekund, ile wskazuje ten numer
  7. (pierwszy – 1 sekunda, 2 – dwie sekundy, trzeci - 3 sekundy). Proces macierzysty
  8. powinien poczeka ć na zako ń czenie wykonania wszystkich swoich potomków.
  9. */
  10.  
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <unistd.h>
  14. #include <sys/types.h>
  15. #include <sys/wait.h>
  16.  
  17. int main(int argc, char *argv[])
  18. {
  19.     if(argc != 2){
  20.         fprintf(stderr, "Za malo lub za duzo argumentow\nUzycie: %s [liczba procesow]\n", argv[0]);
  21.         return EXIT_FAILURE;
  22.     }
  23.  
  24.     int argument = atoi(argv[1]);
  25.     if(argument < 0)
  26.         argument = 0;
  27.  
  28.     pid_t pids;
  29.  
  30.     for(int i = 1; i <= argument; i++){
  31.         usleep(100);
  32.         pids = fork();
  33.         if(pids == 0){
  34.             for(int j = 0; j < 4; j++)
  35.                 printf("PID potomka: %d PID rodzica: %d NR: %d\n", getpid(), getppid(), i);
  36.             printf("\n");
  37.             sleep(i+1);
  38.             printf("Koniec procesu potomnego nr: %d\n", i);
  39.             return EXIT_SUCCESS;
  40.         }
  41.         else if(pids == -1){
  42.             perror("fork");
  43.             return EXIT_FAILURE;
  44.         }
  45.         else if(pids > 0 && i == argument){
  46.             waitpid(pids, NULL, 0);
  47.         }
  48.     }
  49.  
  50.     return EXIT_SUCCESS;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement