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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вернуть число из signal handler? 
:(
    Опции темы
Goryachev
Дата 27.3.2007, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 23.2.2005
Где: Израиль

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



Ловлю SIGABRT в хандлере.
Возможно ли вернуть число при заканчивании сигнала обработчика? (в системму)
PM MAIL   Вверх
MAKCim
Дата 27.3.2007, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



нет, можно только установить глобальную переменную
Код

static sig_atomic_t variable; /* тип sig_atomic_t обязателен */
void sigabrt_handler(int signal) {
...
/* установка variable */
}



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

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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 23.2.2005
Где: Израиль

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



MAKCim
будет ли эта глобальная переменная видна в другом процессе, из которого я создаю этот процесс?
PM MAIL   Вверх
MAKCim
Дата 29.3.2007, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Goryachev @  29.3.2007,  10:10 Найти цитируемый пост)
будет ли эта глобальная переменная видна в другом процессе, из которого я создаю этот процесс? 

в Linux используется COW (Copy On Write) стратегия при создании процесса, это значит, что до попытки изменения (записи) порожденным процессом глобальной переменной, ее значение совпадает в обоих процессах (по сути это разделяемый read-only ресурс). При попытке записи порожденным процессом в эту переменную происходит #PF (страничное исключение): для этого процесса выделяется страница памяти, туда копируется содержимое страницы памяти, в которую он пытался записать данные и происходит перезапуск инструкции записи, которая вызвала #PF (mov например). Т. е я хочу сказать, что в родительском процессе изменения не будут видны
Если у тебя идет работа именно с процессами, то используй IPC, например Message Queue
т. е создается очередь сообщений, которая по мере вызова обработчиков сигналов заполняется
в качестве ключа конкретного сообщения можно взять pid процесса
Код

struct msg {
    long type;
    <твои данные>
};

static int msg_id; /* главный процесс создает очередь сообщений */

static void handler(int signal) {
    ...
    struct msg msg;
    msg.type = getpid(); /* получаем pid процесса */
/* заполнение остальных элементов структуры */
    msgsnd(msg_id, &msg, sizeof(struct msg) - sizeof(long), 0);
}



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

PM MAIL   Вверх
Goryachev
Дата 29.3.2007, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 23.2.2005
Где: Израиль

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



MAKCim
спасибо за ответ, но эти техники я знаю. Меня интересовало, можно ли только по возвращённому с хандлера узнать, что вернулось. Потому, что по обычному выходу процесса, я получаю значение, возвращённое с процесса, 0 - 255 (байт).
Я пренципиально не хотел пользоватся IPC, потому что создаёт лишний overhead.
Но благодарю за ответ smile
PM MAIL   Вверх
MAKCim
Дата 29.3.2007, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Goryachev @  29.3.2007,  13:02 Найти цитируемый пост)
Я пренципиально не хотел пользоватся IPC, потому что создаёт лишний overhead.

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


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

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

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

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


 




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


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

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