Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Передача сигналов.


Автор: T0ohtik 29.5.2008, 21:17
Есть задание: Разработать приложение, создающее дочерний процесс. Родительский процесс «засыпает» на 5 сек. И после отправляет сигнал  SIGUSR1 в дочерний процесс. При получении этого сигнала дочерний процесс создает два потока. Первый поток печатает символ ‘a’ 5000 раз, второй поток печатает символ  ‘b’ 10000 раз.

Код

#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <pthread.h>

void* Thread1(void *unused)
{    
    int i = 0;
    for(i = 0; i < 5000; i++)
        printf("a");
    return 0;
    
}

void* Thread2(void *unused)
{
    int i = 0;
    for(i = 0; i < 10000; i++)
        printf("b");
    return 0;
    
}

void sig_hndlr()
{
    sleep(10);
    pthread_t FirstThread;
    pthread_create(&FirstThread,NULL,&Thread1,NULL);
}



int main()
{
pid_t pid = fork();
if(pid == -1)
{
    ;    
}
else
{
    sleep(5);
    struct sigaction act;
    memset(&act,0,sizeof(act));

    act.sa_handler = &sig_hndlr;
    sigaction(SIGUSR1,&act,NULL);
}
return 0;
} 


Но сигнал почему то не передается.

Автор: MAKCim 29.5.2008, 21:43
Цитата(T0ohtik @  29.5.2008,  21:17 Найти цитируемый пост)
Но сигнал почему то не передается. 

не удивительно
Код

void sig_hndlr() {
    sleep(10);
    pthread_t FirstThread, SecondThread;
    pthread_create(&FirstThread, NULL, &Thread1, NULL);
    pthread_create(&SecondThread, NULL, &Thread2, NULL);
    pthread_join(FirstThread, NULL);
    pthread_join(SecondThread, NULL);
}

int main() {
    struct sigaction action;
    pid_t pid;
    memset(&action, 0, sizeof(action));
    action.sa_handler = &sig_hndlr;
    pid = fork();
    if (pid == 0) {
        sigaction(SIGUSR1, &action, NULL);
        pause();
    } else if (pid < 0) return errno;
    sleep(5);
    kill(pid, SIGUSR1)
    wait(NULL);
    return 0;
} 

Автор: T0ohtik 31.5.2008, 21:08
Что то я не могу вловить особой разницы твоего и моего кода Объясни пожалуйста

Автор: MAKCim 31.5.2008, 21:23
Цитата(T0ohtik @  31.5.2008,  21:08 Найти цитируемый пост)
Что то я не могу вловить особой разницы твоего и моего кода Объясни пожалуйста 

что объяснить?
в чем разница? посмотри внимательнее
и задавай конкретные вопросы

Автор: T0ohtik 31.5.2008, 21:33
Вопрос конкретный. Почему у меня не передается сигнал. Большой разницы в твоем и моем коде не вижу. Тыкни пальцем.

Автор: MAKCim 31.5.2008, 22:02
T0ohtik, 
сигнал не передается, потому что ты его не  передаешь  smile 
генерация сигнала идет посредством kill()

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)