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