можно получить статус выхода из дочернего процесса в родительском

Я пытаюсь получить код выхода из дочернего процесса в родительском процессе. Если процесс снова переходит в цикл while для разветвления, я не получаю код выхода. Я пробовал некоторые варианты для waitpid, такие как WNOHANG, но затем программа зависала. Может быть, то, чего я не хочу, невозможно, потому что это что-то вроде ребенка-зомби?

Это мой код.

      void    parrent_process(t_token *token, t_info *info)
{
    pid_t   pid;
    int     wstatus;

    pid = fork();
    if (pid == -1)
        return (print_error_msg(FORK_FAIL, NULL, NULL));
    if (pid == 0)
    {
        child_process(token);
    }
    if (info->in)
        close(info->in);
    waitpid(pid, &wstatus, 0);
    if (WIFEXITED(wstatus))
        info->exit_code = WEXITSTATUS(wstatus);
}

void    child_process(t_token *token)
{
    t_token *cmd_token;
    pid_t       pid;

    pid = 0;
    cmd_token = token;
    while (token->next && ((token->next)->type == GREAT))
    {
        pid = fork();
        if (pid == -1)
            return (print_error_msg(FORK_FAIL, NULL, NULL));
        if (pid == 0)
        {
            redirect_output(token);
            break;
        }
        token = token->next->next;
    }
    if (execve(cmd_token->path, cmd_token->args, cmd_token->envp) == -1)
    {
        print_error_msg(CMD_NOT_FOUND, "minishell", cmd_token->args[0]);
        exit(127);
    }
}

0 ответов

Другие вопросы по тегам