Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача сигналов. 
:(
    Опции темы
T0ohtik
Дата 29.5.2008, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 9.2.2008

Репутация: нет
Всего: 1



Есть задание: Разработать приложение, создающее дочерний процесс. Родительский процесс «засыпает» на 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;
} 


Но сигнал почему то не передается.
PM MAIL   Вверх
MAKCim
Дата 29.5.2008, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(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;
} 


Это сообщение отредактировал(а) MAKCim - 29.5.2008, 21:46


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
T0ohtik
Дата 31.5.2008, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 9.2.2008

Репутация: нет
Всего: 1



Что то я не могу вловить особой разницы твоего и моего кода Объясни пожалуйста
PM MAIL   Вверх
MAKCim
Дата 31.5.2008, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



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

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

Это сообщение отредактировал(а) MAKCim - 31.5.2008, 21:25


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
T0ohtik
Дата 31.5.2008, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 9.2.2008

Репутация: нет
Всего: 1



Вопрос конкретный. Почему у меня не передается сигнал. Большой разницы в твоем и моем коде не вижу. Тыкни пальцем.
PM MAIL   Вверх
MAKCim
Дата 31.5.2008, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



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


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.