Исправление beastie, (текущая версия) :
wait4 там есть: https://github.com/majek/systrace/blob/master/systrace.c#L457, но сигнал-хандлер там с ошибками — сильно не вчитывался — первое, что в глаза бросилось, но данный кусок кода должен выглядеть примерно так:
static void
child_handler(int sig)
{
int s = errno, status;
/* и так ясно, что sig == SIGCHLD */
close(trfd);
while (wait4(-1, &status, WNOHANG, NULL) > 0)
;
/* что дальше со status делать? */
errno = s;
}
signal(SIGCHLD, child_handler)
UPD: хотя… были там какие-то заковырки с SIGCHLD, не помню уже, поэтому всё, что я написал выше — ложь и IMHO ☺
Исправление beastie, :
wait4 там есть: https://github.com/majek/systrace/blob/master/systrace.c#L457, но сигнал-хандлер там с ошибками — сильно не вчитывался — первое, что в глаза бросилось, но данный кусок кода должен выглядеть примерно так:
static void
child_handler(int sig)
{
int s = errno, status;
/* и так ясно, что sig == SIGCHLD */
close(trfd);
while (wait4(-1, &status, WNOHANG, NULL) > 0)
;
/* что дальше со status делать? */
errno = s;
}
signal(SIGCHLD, child_handler)
UPD: хотя… были там какие-то заковарки с SIGCHLD, не помню уже, поэтому всё, что я написал выше — ложь и IMHO ☺
Исправление beastie, :
wait4 там есть: https://github.com/majek/systrace/blob/master/systrace.c#L457, но сигнал-хандлер там с ошибками — сильно не вчитывался — первое, что в глаза бросилось, но данный кусок кода должен выглядеть примерно так:
static void
child_handler(int sig)
{
int s = errno, status;
/* и так ясно, что sig == SIGCHLD */
close(trfd);
while (wait4(-1, &status, WNOHANG, NULL) > 0)
;
/* что дальше со status делать? */
errno = s;
}
signal(SIGCHLD, child_handler)
Исходная версия beastie, :
wait4 там есть: https://github.com/majek/systrace/blob/master/systrace.c#L457, но сигнал-хандлер там с ошибками — сильно не вчитывался — первое, что в глаза бросилось, но данный кусок кода должен выглядеть примерно так:
static void
child_handler(int sig)
{
int s = errno, status;
if (sig == SIGCHLD)
close(trfd);
while (wait4(-1, &status, WNOHANG, NULL) > 0)
;
/* что дальше со status делать? */
errno = s;
}
signal(SIGCHLD, child_handler)