как правильно использовать fork, exec, wait

Оболочка яДля написания необходимо выполнить программу, данную ему пользователем. Вот'очень упрощенная упрощенная версия моей программы

int main()
{
    pid_t pid = getpid(); // this is the parents pid

    char *user_input = NULL;
    size_t line_sz = 0;
    ssize_t  line_ct = 0; 

    line_ct = getline(&user_input, &line_sz, stdin); //so get user input, store in user_input

    for (;;)
    {
        pid_t child_pid = fork(); //fork a duplicate process

        pid_t child_ppid = getppid(); //get the child's parent pid

        if (child_ppid == pid) //if the current process is a child of the main process
        {
            exec(); //here I need to execute whatever program was given to user_input
            exit(1); //making sure to avoid fork bomb
        }

        wait(); //so if it's the parent process we need to wait for the child process to finish, right?

    }
}
Я разветвил новый процесс & проверил, если этоправильно ли обрабатывает ребенокКакой исполнитель я мог бы использовать здесь для того, что яя пытаюсь сделать? Какой самый простой способКакие у меня аргументы ждать? документация, которую яя смотрю на этоне очень помогает

Предположим, что пользователь может ввести что-то вроде ls, ps, pwd

Благодарю.

Редактировать:

const char* hold = strdup(input_line);
char* argv[2]; 

argv[0] = input_line;
argv[1] = NULL;

char* envp[1];
envp[0] = NULL;

execve(hold, argv, envp);

Ответы на вопрос(1)

Ваш ответ на вопрос