LINUX.ORG.RU

Почему могут «неработать» sigwait(SIGCONT) и pause()?

 , , , ,


0

1

Я пытаюсь «придержать» ребенка пока родитель будет готов. Получив сигнал SIGCONT ребенок не просыпается по непонятной мне причине. Также я пробовал sigwait(SIGUSR1)/kill(SIGUSR1).

Эта проблема исчезает если запускать под strace.

На сейчас получилось придерживать ребенка при помощи raise(SIGSTOP).

Пример неработающего кода

int pid;

switch(pid = fork())
{
case 0:
    pause();
    execve();

default:
    sleep(1);
    kill(pid, SIGCONT);
    break;
}

do {} while (1);
★★★★★

Я не знаю что такое waitsig, такого нет в libc.

Я пытаюсь «придержать» ребенка пока родитель будет готов.

Для этого есть семафоры http://man7.org/linux/man-pages/man3/sem_init.3.html. То что ты делаешь неправильно.

xpahos ★★★★★ ()

У тебя талант писать непонятно. Ты послал себе SIGSTOP и спрашиваешь, почему дальше ничего не работает, или что?

anonymous ()
Ответ на: комментарий от xpahos

Извнияюсь - sigwait().

C семафорами мороки много.

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

Нет - с SIGSTOP все отлично работает но както некрасиво. А вот если я пытиюсь остановить ребенка при помощи sigwait() или pause() - работает только под дебаггером.

cvv ★★★★★ ()
Последнее исправление: cvv (всего исправлений: 2)
Ответ на: комментарий от cvv

pause и SIGCONT несовместимы. Это разные сущности, посылай SIGSTOP.

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

Можешь поподробней? и почему под strace() все неплохо совмещается?

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