URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6068
[ Назад ]

Исходное сообщение
"shmget и fork"

Отправлено Rublev , 10-Янв-07 13:26 
Здравствуйте

после каждого shmget память родителя увеличивается на 4К (похоже на размер до округленного сегмента PAGE_SIZE) - соответственно каждый потом увеличивается в размере на 4К. После долгого цикла создания, память постепенно сьедается.

Подскажите откуда беруться эти 4К и как их очищать в родителе/потомках

Спасибо заранее!

int shm_id;

for (i = 0; i < 500; i++) {

    if ((shm_id = shmget (IPC_PRIVATE, 1, IPC_CREAT|0666)) < 0) {
        perror("shared memory - create pipe status"); //exit(1);
        exit(0);
    }

                
    if (((int *) shmat (shm_id, 0, 0)) == NULL) {
        perror("shared memory attach - create pipe status");
        exit(0);
    }
    
    pid = fork();

    if (pid < 0) {
        perror("fork");
        printf("exit %d\n", i);
        exit(1);
    } else if (pid > 0) {
        printf("parent, forked pid: %d\n", pid);
    } else {
        printf("child: %d, pid: %d\n", i, getpid());
        sleep(10);
        exit(1);
    }

}


Содержание

Сообщения в этом обсуждении
"shmget и fork"
Отправлено BigHo , 10-Янв-07 17:20 
shmget следует использовать крайне осторожно. Лучше посмотри в сторону mmap/munmap/madvise.
Их кстати можно комбинировать с shm* вызовами

"shmget и fork"
Отправлено Rublev , 11-Янв-07 10:29 
>shmget следует использовать крайне осторожно. Лучше посмотри в сторону mmap/munmap/madvise.
>Их кстати можно комбинировать с shm* вызовами


спасибо, уже смотрю