LINUX.ORG.RU

продолжить работу после обработки signal


0

0

код примерно таков:

void Signal_Handler(int sig) {
	printf("Yes, I am hear you\n");
}

int main( int argc, char *argv[] ) {

	signal(SIGINT, Signal_Handler);

    if ( fork() == 0) {
           sleep(2);
           kill(getppid(), SIGINT);
           exit(0);
    }

    sleep(10);
    exit(0);
}

В итоге, через 2 секунды main завершает свою работу.
Никогда не задумывался над этим: можно ли продолжить работу далее ?

А если сигнал только для ребенка установить?

swizard
()

Все нормально, все продолжается, man 3 sleep (sleep() makes the current process sleep until seconds seconds have elapsed _or_a_signal_arrives which is not ignored).

Die-Hard ★★★★★
()

Судя по постам в предыдущей ветке, надо,
наверное, подробнее :-)

Вот, спробуй:

void Signal_Handler(int sig) {
   printf("Yes, I hear you\n");
}

int main( int argc, char *argv[] ) {

   signal(SIGINT, Signal_Handler);

    if ( fork() == 0) {
           sleep(2);
           kill(getppid(), SIGINT);
           exit(0);
    }

    sleep(10);
/********************************/
    printf("!!!!AAAAAAAAAA!!!!!!!!\n");
/********************************/
    exit(0);
}

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

да, я уже тоже прочитал man и сделал аналогичный тест )
спасибо.

nial
() автор топика
Ответ на: комментарий от Die-Hard

Ну вроде бы не все ф-ции можно использовать в обработчике сигнала. Есть в POSIX специальный список ф-ций, которые можно. Кажется, printf() нельзя, вместо этого где-то видел, что использовали write().

php-coder ★★★★★
()
Ответ на: комментарий от Die-Hard

>> А разве в обработчике сигнала можно использовать printf()?

> А кто мешает?

Хороший тон - это просто взводить флаг в обработчике сигнала. Или писать 1 байт в pipe :)

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