Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

Re: lug-bg: Задачка Закачка: Bash


  • Subject: Re: lug-bg: Задачка Закачка: Bash
  • From: Aleksandar Valchev <hippo@xxxxxxxxxxxxxxxxxx>
  • Date: Tue, 30 Nov 2004 12:49:33 +0200
  • Organization: Efficient Software Systems

On Tuesday 30 November 2004 12:22, Vasil Kolev wrote:
> On вт, 2004-11-30 at 12:06 +0200, Aleksandar Valchev wrote:
> > Да, exec-а преебава простотията. Вместо exec сложих system(). Със
> > system() май върви по-добре, накара ме да си рестартирам PC-то (като се
> > има на предвид, че няма никакви limits). Мисля си, че е по-добре да се
> > ловят сигналите SIGKILL, SIGSTOP (да не може да се спре изпулнението,
> > чрез kill), но чрез системното извикване signal(), не става. В ман page
> > на signal() пише, че може да игнорираш или да хванеш всички сигнал
> > изключение на SIGKILL и SIGSTOP, като същото се отнася и за sigaction
> > (евала на Linux :) ).
>
> Абе има си fork(), защо преоткриваш колелото...
:) При преоткриването на стари неща възникват нови, по добри идеи :), но все 
пак признавам, че си прав.
>
> > Не мисля, че трябва нещо да пишеш в buffer-a за да зеeма памет. Би
> > трябвало malloc() да заделя памет и тя си остава заделена, без значение
> > дали си записал нещо в нея или не :). Якото е, че не се освобождава :).
>
> Хм, май трябва да видиш как работи ядрото. По принцип памет се заделя
> само логически, физически замаш страница в паметта чак като започнеш да
> пишеш в нея. Пробвай,пусни нещо да malloc-ва, и гледай резултата с top.
>
> Ето така изглежда една класическа fork() бомба:
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <unistd.h>
>
> int main()
> {
>  char *fillbuff;
>
>  while (42)
>  {
>   fork();
>   fillbuff=malloc(4096);
>   *fillbuff='A';
>  }
>  return 0;/* never reached */
> }
No Comment 5 :). Аз го писах това за malloc изхождайки от познанията си за 
C-то, които са общи и не предвидих, какво прави кернела. Отново си прав. 
>
> Вместо malloc може да се заделя shared memory, което е още по-страшно,
> понеже тя се освобождава доста по-трудно, и не мога да се сетя дали
> можеше и да се лимитира.

Само за информация. За да се задели shared memeory си използва shmget() (man 2 
shmget), но при заделянето на shared memory се намесват вече и потребителски 
разрешения. 
За да се задели споделена памет:
shm_hash = shmget(IPC_PRIVATE, HASH_TABLE_SIZE, IPC_CREAT|0777);
Тази памет може да се използва само от процеса, който я е заделил  и от 
неговите дъщерни процеси, заради PCI_PRIVATE аргумента(поне така си 
обяснявам :) ), което е добре в случая, но в други програми това е много 
тъпо :).
============================================================================
A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers).
http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora
To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html
============================================================================



 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.