LINUX.ORG.RU

setpgid не переопределяет группу процесса


0

1

http://pastebin.com/TJHGbc9m три подряд идущие команды начиная с 120 строчки работают неверно. Это можно проверить вставив скомпилировав исходник. Сама программа представляет дерево процессов 1->2,3,4,5->6,7,8, которые в свою очередь перебрасываются по циклу сигналами. Собственно вопрос в следующем: с чем связана неверная работа команды setpgid?



Последнее исправление: iwsyhgia (всего исправлений: 1)

smart-questions-ru. в частности, приведи 5 строчек кода минимального примера, который по-твоему не работает.

val-amart ★★★★★
()
Ответ на: комментарий от val-amart
#include <stdio.h>
#include <unistd.h>
#include <errno.h>

void print_pgid(const char* msg) {
    printf("%s: pgid = %d, pid = %d\n", msg, getpgid(0), getpid());
}

int main () {

    pid_t child;

    print_pgid("parent before fork()");

    if ((child = fork()) == -1)
        perror("fork() failed");

    if (child == 0) {
        print_pgid("child before setpgid()");

        if (setpgid(0, 0))
            perror("setpgid() failed");

        print_pgid("child after setpgid()");
    }
    else
        print_pgid("parent after fork()");

    return 0;
}
yunake@x230:~/src/tmp$ cc pgid.c && ./a.out
parent before fork(): pgid = 738, pid = 738
parent after fork(): pgid = 738, pid = 738
child before setpgid(): pgid = 738, pid = 739
child after setpgid(): pgid = 739, pid = 739

т.е. pgid чайлда успешно поменялся.

val-amart ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.