Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > количество дочерних процессов


Автор: xixadi 16.4.2010, 21:12
Есть ли специальные функции для определения количества дочерних процессов у данного родительского.
Или может можно как-нибудь по-другому контролировать число дочерних процессов?

Автор: MAKCim 17.4.2010, 09:02
смотреть ppid всех процессов
или самостоятельно контролировать (если создаете сами)

Автор: xixadi 17.4.2010, 09:53
Проблема возникает в том, что при завершении дочерних процессов родительский процесс должен быть проинформирован об этом и должен изменять число своих рабочих дочерних процессов. С помощью сигналов  у меня что-то не получается.

Автор: MAKCim 17.4.2010, 12:58
"что-то не получается" не значит, что надо использовать что-то другое ;)
что не получается?

Автор: xixadi 17.4.2010, 18:45
Дочерний процесс при завершении работы посылает сигнал SIGCHLD родительскому процессу. Родительский процесс принимает этот сигнал и с помощью обработчика уменьшает на 1 число своих рабочих дочерних процессов. А вот если несколько(n) дочерних процессов заканчиваются одновременно, то и сигналы SIGCHLD они посылают одновременно. Но родительский процесс воспринимает их как один сигнал и обработчик уменьшает на 1 число рабочих дочерних процессов, хотя реально их стало меньше на n.

Автор: MAKCim 18.4.2010, 09:19
xixadi
используйте следующую идиому
Код

static void sigchld_handler(int signum)
{
    int status;
    int error;
    for (; (error = waitpid(-1, &status, WNOHANG)) > 0; )
    {
        /* уменьшаем счетчик */
    }
    if (error < 0)
    {
        /* ошибка */
    }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)