Advertisement
Guest User

Untitled

a guest
May 25th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.33 KB | None | 0 0
  1. // Task 3
  2. // Параметры при запуске передавать в кавычках, чтобы программам можно было
  3. // передать аргументы.
  4. // Если аргументы передавать ненадо, можно вместо функции system использовать execve.
  5. #include <stdio.h>
  6. #include <unistd.h>
  7. #include <sys/types.h>
  8. #include <sys/wait.h>
  9.  
  10. int main(int argc, const char *argv[]) {
  11.     __pid_t cpid;
  12.  
  13.     // 0 элемент пропустим, т.к. это имя нашей программы.
  14.     for (int i = 1; i < argc; i++) {
  15.         cpid = fork();
  16.         if (cpid == 0) {
  17.             // Это копия. Запустим программу без параметров.
  18.             printf("CHILD: exec: %s\n", argv[i]);
  19.             //execv(argv[i], (char *[]){ argv[i], "1000", NULL });
  20.             system(argv[i]);
  21.             _exit(0);
  22.         }
  23.         else if (cpid < 0) {
  24.             perror("Fork error");
  25.         }
  26.         else {
  27.             // После форка основной процесс попадет сюда.
  28.             int status;
  29.             waitpid(cpid, &status, 0);
  30.             printf("Child process name=%s, PID=%d, return code=%d\n", argv[i], cpid, status);
  31.         }
  32.     }
  33.  
  34.     printf("DONE\n");
  35.     return 0;
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement