Как получить дочерний процесс для изменения списка ссылок C - PullRequest
1 голос
/ 15 февраля 2012

Здравствуйте, у меня есть программа, которая требует дочерний процесс для изменения списка ссылок, который родительский процесс отслеживает. В основном в родительском процессе у меня есть обработчик сигнала, например ..

struct sigaction sa;
sa.sa_handler = someFunction;
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART;
if(sigaction(SIGUSR1, &sa, NULL) == -1){
    printf("We have a problem, sigaction is not working.\n");
    perror("\n");
    exit(1);    
}

Где sa_handler - модифицирующая функция. Затем у меня есть глобальный связанный список, который содержит родительский процесс, называется struct conectionClient. Функция, которую я использую для изменения списка ссылок, работает, но когда я вызываю обработчик сигнала, как в ...

if(!fork){
raise(SIGUSR1);
exit(0);
} 

И я fork (), fork (), ... fork (), родительский процесс не запоминает предыдущие форки, как будто что-то сброшено, и список ссылок начинается заново. Я что-то упускаю?

Спасибо

1 Ответ

2 голосов
/ 15 февраля 2012

Да?

Кажется, вам не хватает того факта, что каждый процесс выполняется в своем собственном, частном пространстве памяти.Ребенок не может ничего изменить в памяти родителя.Это верно, если ваша операционная система не является достаточно базовой, чтобы не поддерживать защиту памяти, и в этом случае вы должны сказать это очень четко.

Возможно, вам следует изучить потоки, которые являются параллельными путями выполнения в общая область памяти.

...