Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Napisz program, który w zależności od wartości argumentu podanego w linii poleceń
- wygeneruje odpowiednią liczbę procesów potomnych, które będą się wykonywały
- współbieżnie. Każdy z procesów potomnych powinien wypisać 4 razy na ekranie
- swój PID, PID swojego rodzica oraz numer określający, którym jest potomkiem
- rodzica (1, 2, 3 ...), a następnie usnąć na tyle sekund, ile wskazuje ten numer
- (pierwszy – 1 sekunda, 2 – dwie sekundy, trzeci - 3 sekundy). Proces macierzysty
- powinien poczeka ć na zako ń czenie wykonania wszystkich swoich potomków.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- int main(int argc, char *argv[])
- {
- if(argc != 2){
- fprintf(stderr, "Za malo lub za duzo argumentow\nUzycie: %s [liczba procesow]\n", argv[0]);
- return EXIT_FAILURE;
- }
- int argument = atoi(argv[1]);
- if(argument < 0)
- argument = 0;
- pid_t pids;
- for(int i = 1; i <= argument; i++){
- usleep(100);
- pids = fork();
- if(pids == 0){
- for(int j = 0; j < 4; j++)
- printf("PID potomka: %d PID rodzica: %d NR: %d\n", getpid(), getppid(), i);
- printf("\n");
- sleep(i+1);
- printf("Koniec procesu potomnego nr: %d\n", i);
- return EXIT_SUCCESS;
- }
- else if(pids == -1){
- perror("fork");
- return EXIT_FAILURE;
- }
- else if(pids > 0 && i == argument){
- waitpid(pids, NULL, 0);
- }
- }
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement