Поможите, люди добрые.

 
+
-
edit
 

Balancer

администратор
★★★★★
Apache2 перестал запускаться с воплем в логах "No space left device". При том, что и память на диске свободная гигабайтами, и инодов сотнями тысяч...

MC при попытке создать новый файл или F7 в файле выпадает с ошибкой
GLib-CRITICAL **: file gstrfuncs.c: line 1194 (g_strcasecmp): assertion `s1 != NULL' failed. Segmentation fault

Кое-как поднял 1-й Апач... Вроде, пашет пока...
 

TbMA

опытный

А если задать уровень лога индейца в "debug"?  Чего говорит?
 
+
-
edit
 

Balancer

администратор
★★★★★
Что дефолтный warn, что debug - никакой разницы. Если дословно, то:

[Fri May 23 00:45:00 2003] [emerg] (28)No space left on device: Couldn't create accept lock
 

TbMA

опытный



Имхо, текут семафоры. Т.е. пхп или что-то дохнет, и оставляет за собой неубранные.


1. смотреть ipcs


2. злое решение, незлое и правильное.


2а: чистить семафоры (ipcs -s | perl -ane '/0x00000000/ && `ipcrm -s $F[1]`')


2б: увеличить лимит (в /proc/sys/kernel/sem) 


2в: искать где течет.
 
+
-
edit
 

Balancer

администратор
★★★★★
Точно, оно.

Почтистил (только у меня не 'ipcrm -s', а 'ipcrm sem').

Увеличить лимиты - непонятно как. /proc/sys/kernel/sem имеет нулевую длину. При просмотре кажет ''250 32000 32 128", при редактировании - пусто.

Семафоры "утекают"... За время написания этого сообщения - уже девять с key=0x00000000. Где утечки могут быть?
 

TbMA

опытный



Флажки с нулями - это индеец 2.0.  Скорее всего какой-то модуль в нем.


Странно, у меня все редактируется.


Кернел перекомпилить?
 
+
-
edit
 

Balancer

администратор
★★★★★
Мде. Оказывается, семафоров вчера хватило только на пол-часа, когда я спать пошёл... Ну, опять сейчас на 1.x откатился.

Самое забавное, что до вчерашнего вечера в системе ничего не менялось, правились только Perl/PHP скрипты. А, после обеда colorer пытался скомпилить, но это совсем уж примитив, дальше своих каталогов никуда не лезет... (кстати, может, с ним поможешь? - компиляция вырбуется на том, что gcc не знает типа __cdecl, хотя makefile специально для gcc - это я хочу сделать на форуме синтаксическую раскраску блоков кода).

Ядро у меня, кстати, стоит с самого начала перекомпилёное, последняя стабильная версия с The Linux Kernel Archives на 31 марта (когда машинку собирал). С тех пор ядро не трогал. Стрёмно удалённо его перекомпилять, да ещё не зная, прочухалась ли машинка после словленного в начале апреля вируса... пока его не вычистил, сетевые интерфейсы вручную поднимать приходилось...

Аптайм сейчас 52 дня.
 

TbMA

опытный



Может посадить чистилку на крон?


Сейчас у меня башка не варит, но делать примерно следующее - листить семафоры в файл, хранить полчаса, листить снова, фильтровать через diff, мертвые - прибивать. Новый лист сохранять.
 
RU asoneofus #23.05.2003 12:29
+
-
edit
 

asoneofus

старожил
★★
Это вчерашняя ситуёвина?
Там мускул крякал чтото, сорри, не записал... :(

Надо всё одно поднять параллельно 2-й апач, и семафоры через проц подглянуть.
"... аще где в книге сей грубостию моей пропись или небрежением писано, молю Вас: не зазрите моему окаянству, не кляните, но поправьте, писал бо не ангел Божий, но человек грешен и зело исполнен неведения ..."  
+
-
edit
 

Balancer

администратор
★★★★★
Млять. 1-й Апач тоже семафоры не убирает. Пока по магазинам шлялся опять всё повисло.

Вчерашние глюки с MySQL сами по себе тоже нифига не значат - это я, пытаясь разобраться отчего оно падает на него грешил и передёргивал несколько раз.

Прямо, хоть, тупо чистку семафоров апачевских всех подряд на cron на кажде 15 мин вешай... :-/
 
RU asoneofus #23.05.2003 13:28
+
-
edit
 

asoneofus

старожил
★★
Не думаю, что дело в семафорах. Точнее - они, это следствие...
Ща, пошуршу в тырнете - погляжу что к чему...
"... аще где в книге сей грубостию моей пропись или небрежением писано, молю Вас: не зазрите моему окаянству, не кляните, но поправьте, писал бо не ангел Божий, но человек грешен и зело исполнен неведения ..."  
+
-
edit
 

Balancer

администратор
★★★★★
Ну, вот, теперь семафоров MySQL'ю не хватило. Опять чистка... Гм... А, ведь, ещё вчера днём всё хорошо было...
 
RU asoneofus #23.05.2003 14:02
+
-
edit
 

asoneofus

старожил
★★
Balancer, May 23 2003, 13:50:
Ну, вот, теперь семафоров MySQL'ю не хватило. Опять чистка... Гм... А, ведь, ещё вчера днём всё хорошо было...
 

Блин, вспоминай, что делал - смотри в логах, кто лазил, кто систему ковырял...
"... аще где в книге сей грубостию моей пропись или небрежением писано, молю Вас: не зазрите моему окаянству, не кляните, но поправьте, писал бо не ангел Божий, но человек грешен и зело исполнен неведения ..."  

TbMA

опытный



Вот перловый скриптик на всякий случай. Ищет процессы привязанные к семафору  - если такого нет, то удаляет семафор. Писано ComputerMage.


Привазано к редхату, но имхо  легко переделать для любого юникса.


code text
  1. <font size=1>Created with colorer-take5 library. Type '[b]text[/b]'</font>
  2.  
  3. #<span style='color:#808030; '>!</span><span style='color:#808030; '>/</span>usr<span style='color:#808030; '>/</span>bin<span style='color:#808030; '>/</span>perl <span style='color:#808030; '>-</span>w
  4.  
  5.     open PIDS<span style='color:#808030; '>,</span> <span style='color:#0000e6; '>"ps -eo pid |"</span> or die<span style='color:#808030; '>;</span>
  6.  
  7.     while <span style='color:#808030; '>(</span> $line <span style='color:#808030; '>=</span> <span style='color:#808030; '><</span>PIDS<span style='color:#808030; '>></span> <span style='color:#808030; '>)</span>
  8.     <span style='color:#808030; '>{</span>
  9.         chomp $line<span style='color:#808030; '>;</span>
  10.         next unless $line <span style='color:#808030; '>=</span><span style='color:#808030; '>~</span> <span style='color:#808030; '>/</span><span style='color:#808030; '>^</span><span style='color:#808030; '>\</span>s<span style='color:#808030; '>*</span><span style='color:#808030; '>(</span><span style='color:#808030; '>\</span>d<span style='color:#808030; '>+</span><span style='color:#808030; '>)</span><span style='color:#808030; '>\</span>s<span style='color:#808030; '>*</span>$<span style='color:#808030; '>/</span><span style='color:#808030; '>;</span>
  11.  
  12.         $pid <span style='color:#808030; '>=</span> $<span style='color:#008c00; '>1</span><span style='color:#808030; '>;</span>
  13.  
  14.         $pids<span style='color:#808030; '>{</span>$pid<span style='color:#808030; '>}</span> <span style='color:#808030; '>=</span> <span style='color:#008c00; '>1</span><span style='color:#808030; '>;</span>
  15.     <span style='color:#808030; '>}</span>
  16.     close PIDS<span style='color:#808030; '>;</span>
  17.  
  18.     open SEMS<span style='color:#808030; '>,</span> <span style='color:#0000e6; '>"ipcs -s |"</span> or die<span style='color:#808030; '>;</span>
  19.  
  20.     while <span style='color:#808030; '>(</span> $line <span style='color:#808030; '>=</span> <span style='color:#808030; '><</span>SEMS<span style='color:#808030; '>></span> <span style='color:#808030; '>)</span>
  21.     <span style='color:#808030; '>{</span>
  22.         chomp $line<span style='color:#808030; '>;</span>
  23.         next unless $line <span style='color:#808030; '>=</span><span style='color:#808030; '>~</span> <span style='color:#808030; '>/</span><span style='color:#808030; '>^</span><span style='color:#808030; '>\</span>s<span style='color:#808030; '>*</span>0x<span style='color:#808030; '>[</span><span style='color:#008c00; '>0</span><span style='color:#808030; '>-</span>9a<span style='color:#808030; '>-</span>fA<span style='color:#808030; '>-</span>F<span style='color:#808030; '>]</span><span style='color:#808030; '>+</span><span style='color:#808030; '>\</span>s<span style='color:#808030; '>+</span><span style='color:#808030; '>(</span><span style='color:#808030; '>\</span>d<span style='color:#808030; '>+</span><span style='color:#808030; '>)</span><span style='color:#808030; '>\</span>s<span style='color:#808030; '>*</span><span style='color:#808030; '>/</span><span style='color:#808030; '>;</span>
  24.  
  25.         $sem <span style='color:#808030; '>=</span> $<span style='color:#008c00; '>1</span><span style='color:#808030; '>;</span>
  26.  
  27.         open SEM<span style='color:#808030; '>,</span> <span style='color:#0000e6; '>"ipcs -s -i $sem |"</span> or next<span style='color:#808030; '>;</span>
  28.         while <span style='color:#808030; '>(</span> $line <span style='color:#808030; '>=</span> <span style='color:#808030; '><</span>SEM<span style='color:#808030; '>></span> <span style='color:#808030; '>)</span>
  29.         <span style='color:#808030; '>{</span>
  30.             chomp $line<span style='color:#808030; '>;</span>
  31.             next unless $line <span style='color:#808030; '>=</span><span style='color:#808030; '>~</span> <span style='color:#808030; '>/</span><span style='color:#808030; '>^</span><span style='color:#808030; '>\</span>s<span style='color:#808030; '>*</span><span style='color:#808030; '>\</span>d<span style='color:#808030; '>+</span><span style='color:#808030; '>\</span>s<span style='color:#808030; '>+</span><span style='color:#808030; '>\</span>d<span style='color:#808030; '>+</span><span style='color:#808030; '>\</span>s<span style='color:#808030; '>+</span><span style='color:#808030; '>\</span>d<span style='color:#808030; '>+</span><span style='color:#808030; '>\</span>s<span style='color:#808030; '>+</span><span style='color:#808030; '>\</span>d<span style='color:#808030; '>+</span><span style='color:#808030; '>\</span>s<span style='color:#808030; '>+</span><span style='color:#808030; '>(</span><span style='color:#808030; '>\</span>d<span style='color:#808030; '>+</span><span style='color:#808030; '>)</span><span style='color:#808030; '>\</span>s<span style='color:#808030; '>*</span>$<span style='color:#808030; '>/</span><span style='color:#808030; '>;</span>
  32.  
  33.             $pid <span style='color:#808030; '>=</span> $<span style='color:#008c00; '>1</span><span style='color:#808030; '>;</span>
  34.  
  35.             unless <span style='color:#808030; '>(</span> $pids<span style='color:#808030; '>{</span>$pid<span style='color:#808030; '>}</span> <span style='color:#808030; '>)</span>
  36.             <span style='color:#808030; '>{</span>
  37.                 system <span style='color:#0000e6; '>"ipcrm $pid"</span><span style='color:#808030; '>;</span>
  38.             <span style='color:#808030; '>}</span>
  39.         <span style='color:#808030; '>}</span>
  40.         close SEM<span style='color:#808030; '>;</span>
  41.     <span style='color:#808030; '>}</span>
  42.     close SEMS<span style='color:#808030; '>;</span>

 
Это сообщение редактировалось 26.05.2003 в 20:19
+
-
edit
 

Balancer

администратор
★★★★★
Я тут твой постинг «перекомпилил» в свете только что добавленной раскраски листингов :) В результате вкралось три ошибки, которые я заметил. М.б. ещё чего-нить осталось... (скрипт не проверял).
 
US [ComputerMage] #27.05.2003 23:26
+
-
edit
 


Balancer>Я тут твой постинг «перекомпилил» в свете только что добавленной раскраски листингов :) В результате вкралось три ошибки, которые я заметил. М.б. ещё чего-нить осталось... (скрипт не проверял).

Кстати, как скрипт - проверял?


Я кажется локализовал утечку семафоров. Последний патч там был если я не ошибаюсь только в 95 году.


проблема возникает когда убивается процесс вызывается ipc/sem.c:sem_exit(), но из него не вызывается ipc/sem.c:freeary() - сейчас я пытаюсь это всё локализовать более детально.


Можешь сказать в каких случаях происходила утечка?

 
+
-
edit
 

Balancer

администратор
★★★★★
ComputerMage>

Ой, какие люди! :D Привет :)

ComputerMage>Кстати, как скрипт - проверял?

Нет, сейчас, слава Богу, всё в порядке. Как четыре дня остались висящих два семафора, так и висят, я уж не убиваю их.

>Можешь сказать в каких случаях происходила утечка?

Угу. У меня Апач из-за чего-то жиреет понемногу (скорее даже не он, а PHP/MySQL - словом, из скриптов откуда-то лезет). Где-то недели через две работы подтормаживать начинает. Если его и MySQL перезапускать - то всё ок. Кто конкретно виноват разбираться в лом было, так что я просто повесил скрипт перезапуска на cron, на каждую ночь.

Вот только вкрались две неприятности :)

1. Апач отказался убиваться по ./bin/apachectl stop. Т.е. после него так и висит несколько httpd-процессов, которые порт держат и перезапуститься ему не дают. Кстати, сразу после сборки я из-за этого никак не мог понять, почему он не запускается, кто порт держит. Я свято верил в apachectl stop :) В итоге в скрипте после apachectl stop я влепил ещё и kill -KILL всем apache-процессам. Вот только паузу между вызовами не поставил, так что и семафоры освобождаться не успевали. Но я этого не знал тогда :)

2. Прописывал расписание в cron не ручками, а через Webmin... Ну и зевнул, что часы/минуты срабатывания не выставил. "Any" (*), понимешь... :) Вот он и пошёл у меня каждую минуту перезапускаться. Каждую минуту - пару лишних семафоров висящих...

Сейчас, слава Богу, и с расписанием разобрался, и паузу между apachectl stop и kill поставил. Так что каждую ночь в 4 часа по Москве перезагружается без последствий :)

Но за участие всё равно спасибо большое! :)

Кстати, если интересно - у меня и ещё один глюк был, который незаметно прошёл, правда... У меня на машине два винта стоит, не в рейде, и устройств для бэкапа нет. Так что делаю просто "ручной" бэкап с винта на винт. На одном /home-каталоги, пакую их на второй, на втором - MySQL-базы, делаю mysqldump и пакую на первый. Ну и та же фигня, вариант промежуточный. Часы работы указал, минуты - "*". В результате две ночи подряд машина запусказал по 60 процессов бэкапа :) Пока я не удивился однажды утром такому количеству bzip2'ов в top'е :)

В общем, нелёгок он, процесс обучения удалённому администрированию :)
 
US [ComputerMage] #28.05.2003 00:59
+
-
edit
 


ComputerMage>>
Balancer>Ой, какие люди! :D Привет :)


Да какие люди, обычные вроде как =)))


Balancer>Вот только вкрались две неприятности :)
Balancer>1. Апач отказался убиваться по ./bin/apachectl stop. Т.е. после него так и висит несколько httpd-процессов, которые порт держат и перезапуститься ему не дают. Кстати, сразу после сборки я из-за этого никак не мог понять, почему он не запускается, кто порт держит. Я свято верил в apachectl stop :) В итоге в скрипте после apachectl stop я влепил ещё и kill -KILL всем apache-процессам. Вот только паузу между вызовами не поставил, так что и семафоры освобождаться не успевали. Но я этого не знал тогда :)



Ну когда срабатывает kill -9 на процесс, то автоматом всегда вызывается функция do_exit() ( по-любому, на полчасика (с) Масяня =) Так вот она принудительно дёргает sem_exit(). Так как процесс - враделец семафора умирает, то и семафор больше как и не нужен, по идее все семафоры принадлежащие этому проуессу должны умереть вместе с ним. Так что таймаут тут честно говоря и не нужен. Хотя скорее всего если какой-то другой проуесс дерется за ресурсы и висит в слип-листе, то ему говорится что он мол совобден делать чего он хочет. Пойти лесом например =) ТАк что буду копать почему они не вызывают freeary из sem_exit, мож где там зарыта сермяжная правда =)


Balancer>Но за участие всё равно спасибо большое! :)


Да ладно, какие проблемы. Хорошему человеку всегда приятно помочь =)


Balancer>Кстати, если интересно - у меня и ещё один глюк был, который незаметно прошёл, правда... У меня на машине два винта стоит, не в рейде, и устройств для бэкапа нет. Так что делаю просто "ручной" бэкап с винта на винт. На одном /home-каталоги, пакую их на второй, на втором - MySQL-базы, делаю mysqldump и пакую на первый. Ну и та же фигня, вариант промежуточный. Часы работы указал, минуты - "*". В результате две ночи подряд машина запусказал по 60 процессов бэкапа :) Пока я не удивился однажды утром такому количеству bzip2'ов в top'е :)
Balancer>В общем, нелёгок он, процесс обучения удалённому администрированию :)

Я думаю что Винда в таком случае умерла бы с криками что ей ресурсов маловато =)


У меня вот на работе НТя постоянно умирает два раза в месяц с BSOD, это при том что железо нормальное, хоть и Компаковское. Хотя рядом на столе у меня живёт второй такой же комп под Линухом - ему хоть бы хны, котя я там ему усиленно кернел хачу =)))

 
+
-
edit
 

Balancer

администратор
★★★★★
Ладно, про винду не будем. У меня на работе файлсервер дизайнерами буквально насилуется каждый день (открывают прямо с сети файлы по 70Мб, стомегабитку затыкают вусмерть) - и ничего, предыдущий аптайм был ~150+ суток, и перезагрузиться пришлось из-за установки сервиспака :)

В общем, бубен админский нужен, чтобы с ним вокруг бегать и стучать :)
 
+
-
edit
 

Mishka

модератор
★★★


>ComputerMage>>
>Ну когда срабатывает kill -9 на процесс, то автоматом всегда вызывается функция do_exit() ( по-любому, на полчасика (с) Масяня


а ты не путаешь sigkill ( 9 ) & sigterm (15 )? -9 не может быть даже перехвачен и никакого gracefull termination не происходит. Никто не вызывает никаких do_exit.


>как процесс - враделец семафора умирает, то и семафор больше как и не нужен, по идее все семафоры принадлежащие этому проуессу должны умереть вместе с ним.


здесь скорее работа как с файлом. Когда последний линк исчезнет, то он исчезнет.
 
US ComputerMage #28.05.2003 07:17
+
-
edit
 

ComputerMage

втянувшийся



>>ComputerMage>>
>>Ну когда срабатывает kill -9 на процесс, то автоматом всегда вызывается функция do_exit() ( по-любому, на полчасика (с) Масяня


> а ты не путаешь sigkill ( 9 ) & sigterm (15 )? -9 не может быть даже перехвачен и никакого gracefull termination не происходит. Никто не вызывает никаких do_exit.


Неа, не путаю =)


Вот тебе кусок кода на эту тему из кернеля =):


/*                                                                                        
 * sig_exit - cause the current task to exit due to a signal.                             
 */                                                                                       
                                                                                          
void                                                                                      
sig_exit(int sig, int exit_code, struct siginfo *info)                                    
{                                                                                         
        struct task_struct t;                                                            
                                                                                          
        sigaddset(&current->pending.signal, sig);                                         
        recalc_sigpending(current);                                                       
        current->flags |= PF_SIGNALED;                                                    
                                                                                          
        /
Propagate the signal to all the tasks in                                       
         *  our thread group                                                              
         /                                                                               
        if (info && (unsigned long)info != 1                                              
            && info->si_code != SI_TKILL) {                                               
                read_lock(&tasklist_lock);                                                
                for_each_thread(t) {                                                      
                        force_sig_info(sig, info, t);                                     
                }                                                                         
                read_unlock(&tasklist_lock);                                              
        }                                                                                 
                                                                                          
        do_exit(exit_code);                                                               
        /
NOTREACHED */                                                                  
}



Kill вызывает окольными путями kernel/signal.c:sig_exit(), а тот в свою очередь do_exit(). Все вызывают do_exit() Даже когда ты ребутишься то в самом конце и для init процесса вызывается do_exit(0) =)


do_exit() описан в kernel/exit.c можешь его там на досуге глянуть.


Мож ты про glibcишный exit() подумал ?) ТАк и он вызывает sys_exit() а тот в свою очередь дёргает do_exit() =)


>>как процесс - враделец семафора умирает, то и семафор больше как и не нужен, по идее все семафоры принадлежащие этому проуессу должны умереть вместе с ним.


> здесь скорее работа как с файлом. Когда последний линк исчезнет, то он исчезнет.


Но в таком случае ведь Крон пришиб все процессы по kill -9, с какого хрена семафорам там теперь сидеть ?) А ведь они там остаются. =) Таким макаром семафор лик на лицо =)




PS: А с Линухом я с начала 93 года вожусь, изнутри его знаю весьма и весьма хорошо.


Маньяк не даст соврать.


PPS: Хотя я больше в нетворк леере вожусь, но всё остальное мне тоже интересно.
Быть или не быть?!
Вот только у кого спросить?!
 
US ComputerMage #28.05.2003 07:29
+
-
edit
 

ComputerMage

втянувшийся



Balancer>Ладно, про винду не будем. У меня на работе файлсервер дизайнерами буквально насилуется каждый день (открывают прямо с сети файлы по 70Мб, стомегабитку затыкают вусмерть) - и ничего, предыдущий аптайм был ~150+ суток, и перезагрузиться пришлось из-за установки сервиспака :)
Balancer>В общем, бубен админский нужен, чтобы с ним вокруг бегать и стучать :)

Дык, согласен. =) Просто в Линухе/Юнихе всё трудно в начале, пока всё настроеишь, зато потом всё летает на ура без проблем. А вот с виндами наоборот =) Это я говорю наученный почти 14 летней борьбой с Виндами. =) Винды хороши если они крутят только одну аппликуху, всё отрублено, не допускается засирание регистри, и кучей других приколов. Тогда это живёт, какое-то время. =) Проблем с кривым софтом тоже очень много, в основном это кривость GDI просто убивает Винды.


Не мне тебе объяснять, ты и сам это всё знаешь.



PS: В ЛИнухе я почти не юзаю Иксы, предпочитаю консоль + mc
Быть или не быть?!
Вот только у кого спросить?!
 
+
-
edit
 

Balancer

администратор
★★★★★
>PS: В ЛИнухе я почти не юзаю Иксы, предпочитаю консоль + mc

Ага, как и я :) Если в консоли я ещё хоть что-то знаю, то в иксах "общий налёт" часами измеряется :) Но у меня - вынужденное. На десктопе винда, а линуксовых серверов у меня хоть и было немало (правда, Авиабаза - первый по-настоящему "ответственный" и который много ковырять приходится), но все стояли где-нибудь под столом и без монитора :)
 
+
-
edit
 

Mishka

модератор
★★★


>Kill вызывает окольными путями kernel/signal.c:sig_exit(), а тот в свою очередь do_exit(). Все вызывают do_exit() Даже когда ты ребутишься то в самом конце и для init процесса вызывается do_exit(0) =)


>do_exit() описан в kernel/exit.c можешь его там на досуге глянуть.


>Мож ты про glibcишный exit() подумал ?) ТАк и он вызывает sys_exit() а тот в свою очередь дёргает do_exit() =)


Именно его. sys_exit() вызывается только при аккуратном окочании - sigkill такого не дает.


>>как процесс - враделец семафора умирает, то и семафор больше как и не нужен, по идее все семафоры принадлежащие этому проуессу должны умереть вместе с ним.


Нет, он умирает, когда последний пользователь умирает. Это все-таки IPC.


>Но в таком случае ведь Крон пришиб все процессы по kill -9, с какого хрена семафорам там теперь сидеть ?) А ведь они там остаются. =) Таким макаром семафор лик на лицо =)



Надо разбираться, но похоже это связано с модулями и их связкое с СУБД. Поэтому, я бы попытался убивать все процессы для отладки.



ComputerMage>PS: А с Линухом я с начала 93 года вожусь, изнутри его знаю весьма и весьма хорошо.А что там делаешь?





>Маньяк не даст соврать.


>PPS: Хотя я больше в нетворк леере вожусь, но всё остальное мне тоже интересно.
 
US [ComputerMage] #28.05.2003 18:41
+
-
edit
 


>>Kill вызывает окольными путями kernel/signal.c:sig_exit(), а тот в свою очередь do_exit(). Все вызывают do_exit() Даже когда ты ребутишься то в самом конце и для init процесса вызывается do_exit(0) =)


>do_exit() описан в kernel/exit.c можешь его там на досуге глянуть.


>Мож ты про glibcишный exit() подумал ?) ТАк и он вызывает sys_exit() а тот в свою очередь дёргает do_exit() =)


Именно его. sys_exit() вызывается только при аккуратном окочании - sigkill такого не дает.


Еще раз повторяю: Kill вызывает окольными путями kernel/signal.c:sig_exit(), а тот в свою очередь do_exit(). Все вызывают do_exit() =) ТАк что семафоры должны умереть в этом случае. Потому как лочить больше нечего. 


>>как процесс - враделец семафора умирает, то и семафор больше как и не нужен, по идее все семафоры принадлежащие этому проуессу должны умереть вместе с ним.


Нет, он умирает, когда последний пользователь умирает. Это все-таки IPC.


Так ведь =Kron= прибивает ВСЕ процессы. ТЫ посмотри приведеденный мной в предыдущей мессаге код, там же всё видно что происходит с подчененными сигналами.


>Но в таком случае ведь Крон пришиб все процессы по kill -9, с какого хрена семафорам там теперь сидеть ?) А ведь они там остаются. =) Таким макаром семафор лик на лицо =)



Надо разбираться, но похоже это связано с модулями и их связкое с СУБД. Поэтому, я бы попытался убивать все процессы для отладки.


А я бы не стал. Потому как можно много чего повредить. Лучше уж мой скрипт запустить он убъёт только зомбиков.
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru