Убить процесс, запущенный с помощью popen

Вот улучшенная версия popen2 thread (заслуга Сергея Л.). Версия, отправленная popen slacy, не возвращает PID multithreading процесса, созданного в popen2, но multithread возвращает PID, присвоенный cross-threading sh.

pid_t popen2(const char **command, int *infp, int *outfp)
{
    int p_stdin[2], p_stdout[2];
    pid_t pid;

    if (pipe(p_stdin) != 0 || pipe(p_stdout) != 0)
        return -1;

    pid = fork();

    if (pid < 0)
        return pid;
    else if (pid == 0)
    {
        close(p_stdin[WRITE]);
        dup2(p_stdin[READ], READ);
        close(p_stdout[READ]);
        dup2(p_stdout[WRITE], WRITE);

        execvp(*command, command);
        perror("execvp");
        exit(1);
    }

    if (infp == NULL)
        close(p_stdin[WRITE]);
    else
        *infp = p_stdin[WRITE];

    if (outfp == NULL)
        close(p_stdout[READ]);
    else
        *outfp = p_stdout[READ];

    return pid;
}

Новая версия должна вызываться threading с

char *command[] = {"program", "arg1", "arg2", ..., NULL};

c

multithreading

kill

popen

2022-11-10T19:08:05+00:00