сигналы (неработает принималка сигнала)

Модератор: Модераторы разделов

ssa
Сообщения: 1

сигналы

Сообщение ssa »

есть 2 независимых так сказать процесса, один посылает другому сигнал SIGUSR1, всЁ прикрасно работает, когда запускаешь ручками, но когда эти проги запускает кластер, то один из процессов не ловит сигнал, кроме SIGTERM

в проге (назову client) делаю так:

Код: Выделить всё

        //start capture signals
        if (signal(SIGUSR1, act) == SIG_ERR)
            log_out("SIG_ERR", "init");


другая прога прога(назову main) посылает примерно так:

Код: Выделить всё

    if (kill(clpid, SIGUSR1)) {
  log_out("SIGUSR1 failed.........................


запускаються они примерно так:
в /etc/init.d/ лежит скрипт, он запускает 'main', - 'main' форкаеться и создает кучу 'client'ов, которые тоже форкаються и execv-каються ('main' может пропадать причЁм 'client' остаються) и потом 'main' посылает сигнальчики 'client'ам.

так вот када, я ручками из консоли пишу /etc/init.d/скрипт start
-всЁ чудесно работает, но када енто делает кластер.. , то 'client' не видит что ему шлЁт сигнал 'main', причЁ даже если я, при запущенном кластером скрипте, из консоли говорю kill -SIGUSR1 'client' (его pid) - он их тоже не видет, а если я говорю kill -SIGTERM 'client' - то видет (SIGTERM я тоже перехватываю - он работает всегда), как я ручками из консоли так и кластер - скрипт запускаеться от одного и тогоже имени и группы. почему 'client' не видит сигналы или просто игнорирует или кластер их фильтрует?

надеюсь я понятно изложил)

ssa добавил в 19.01.2005 20:07
спасибо, но я уже разобрался))

Код: Выделить всё

    sigset_t mask;
    sigemptyset(&mask);
    sigaddset(&mask, SIGUSR1);
    sigprocmask (SIG_UNBLOCK, &mask, NULL);


(от предка наследовалось, от кластерсьют)
Спасибо сказали: