Взятие в командной строке аргументов и процессов - PullRequest
1 голос
/ 02 октября 2019

Возьмите аргументы командной строки, например, "program / path_name -l", и создайте как родительский, так и дочерний процесс. Для создания дочернего элемента необходимо использовать вилку, а дочерний элемент должен заменить себя с помощью одной из команд exec. Родительскому процессу необходимо дождаться, пока дочерний процесс завершит работу, и получить статус выхода, а затем использовать статус выхода, чтобы определить, нормально ли вышел из программы и был ли процесс завершен каким-либо сигналом. У меня проблема с тем, что моя программа всегда получает статус выхода 1. Я не уверен, что правильно делаю всю командную строку.

Это то, что у меня так далеко:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main(int argc, char *argv[]){
    pid_t pid = fork();

    if (pid == -1){
      perror("Fork Failure");
      return EXIT_FAILURE;
    }

    else if ( pid == 0 ){
       execvp(argv[1], &argv[1]);
       return EXIT_FAILURE;
    }
    int status;

    waitpid(pid, &status, 0);

    if ( WIFEXITED(status) ){
        int exit_status = WEXITSTATUS(status);
        printf("Exit status is %d\n", exit_status);
    }
    return 0;
}
...