LINUX.ORG.RU

Re: Вопрос к знатокам по waitpid и SIGCHLD.


0

0

Спасибо всем за помощь. Но на самом деле, у меня обработчик 
вот такого вида:

static void sigchld_handler(int sig)
{
    int status;
    pid_t pid;

    pid = __libc_wait(&status);
    if (pid > 0) {
        /* Check for pid... */
    }
}

Все, больше ничего нет. И вот этот-то __libc_wait и подвисает при
повторном входе.

Так что я все равно не совсем понял, из-за чего... :(

> Но на самом деле, у меня обработчик вот такого вида:
> И вот этот-то __libc_wait и подвисает при повторном входе.

такого, вообще говоря, быть не должно.

но не видя кода можно только гадать, причины могут разные.
как устанавливается обработчик? см SA_NOCLDSTOP. действительно
ли SIGCHLD приходит из ядра (si_code >= 0) ? но, скорее всего
кто-то еще вызывает wait4(). замечу, что это может быть и
неявно, напр вызов system(). тогда этот SIGCHLD не относится
ни к одному из ваших явно созданных процессов.

вот что сделайте. включайте свой sigchld_handler с SA_SIGINFO,
тогда в si_pid будет лежать (сюрприз) pid завершившегося процесса.
печатайте его, и печатайте pid после fork().

idle ★★★★★
()
Ответ на: комментарий от idle

Все, большое спасибо, вопрос закрыт! Конечно, у меня еще один тред делал wait, я совсем упустил это из виду.

Еще раз спасибо за помощь.

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