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

 
+
-
edit
 

Mishka

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


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



Пусть вызывается - я же не спорю. Только вот цепочка организуемая по atexit() не вызывается, если убить процесс по -9. Еще раз повторяю: семафоры не должны умереть - семантика у них такая. Это не программные семафоры, а средство IPC in System V. Как файлы они работают - если открыть файл и писануть в него, а потом процесс убить, то файл не  исчезнет - останется на диске.


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


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


IPC = Inter Process Communication


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


А кого это волнует - семантика IPC такая - Inter Process Communication.


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


Нету никакого лика - вот простень тест и результаты прогона на моей системе с SuSE 8.1: 


Linux linux 2.4.19-4GB #1 Fri Sep 13 13:19:15 UTC 2002 i686 unknow



code text
  1. <font size=1>Created with colorer-take5 library. Type '[b]c[/b]'</font>
  2.  
  3.  
  4.  
  5.  
  6. <span style='color:#004a43; '>#</span><span style='color:#800000; font-weight:bold; '>include</span><span style='color:#004a43; '> </span><span style='color:#0000e6; '><sys/types.h></span>
  7. <span style='color:#004a43; '>#</span><span style='color:#800000; font-weight:bold; '>include</span><span style='color:#004a43; '> </span><span style='color:#0000e6; '><sys/ipc.h></span>
  8. <span style='color:#004a43; '>#</span><span style='color:#800000; font-weight:bold; '>include</span><span style='color:#004a43; '> </span><span style='color:#0000e6; '><sys/sem.h></span>
  9. <span style='color:#004a43; '>#</span><span style='color:#800000; font-weight:bold; '>include</span><span style='color:#004a43; '> </span><span style='color:#0000e6; '><stdio.h></span>
  10.  
  11.  
  12. <span style='color:#800000; font-weight:bold; '>int</span> main<span style='color:#808030; '>(</span> <span style='color:#800000; font-weight:bold; '>int</span> argc<span style='color:#808030; '>,</span> <span style='color:#800000; font-weight:bold; '>char</span><span style='color:#808030; '>*</span> argv<span style='color:#808030; '>[</span> <span style='color:#808030; '>]</span> <span style='color:#808030; '>)</span>
  13. <span style='color:#800080; '>{</span>
  14.      <span style='color:#800000; font-weight:bold; '>int</span> rc<span style='color:#800080; '>;</span>
  15.      key_t key <span style='color:#808030; '>=</span> <span style='color:#008c00; '>0</span><span style='color:#800080; '>;</span>
  16.      <span style='color:#800000; font-weight:bold; '>int</span> nsems <span style='color:#808030; '>=</span> <span style='color:#008c00; '>1</span><span style='color:#800080; '>;</span>
  17.      <span style='color:#800000; font-weight:bold; '>int</span> semflg <span style='color:#808030; '>=</span> IPC_CREAT<span style='color:#800080; '>;</span>
  18.      rc <span style='color:#808030; '>=</span> semget<span style='color:#808030; '>(</span> key<span style='color:#808030; '>,</span> nsems<span style='color:#808030; '>,</span> semflg <span style='color:#808030; '>)</span><span style='color:#800080; '>;</span>
  19.      printf<span style='color:#808030; '>(</span> <span style='color:#0000e6; '>"rc=</span><span style='color:#0f69ff; '>%d</span><span style='color:#0f69ff; '>\n</span><span style='color:#0000e6; '>"</span><span style='color:#808030; '>,</span> rc <span style='color:#808030; '>)</span><span style='color:#800080; '>;</span>
  20.      <span style='color:#800000; font-weight:bold; '>return</span> <span style='color:#008c00; '>0</span><span style='color:#800080; '>;</span>
  21. <span style='color:#800080; '>}</span>



linux:~ # ipcs -s



Semaphore Arrays --------


key semid owner perms nsems


linux:~ # t01


bash: t01: command not found


linux:~ # ./t01


rc=0


linux:~ # ipcs -s



Semaphore Arrays --------


key semid owner perms nsems


0x00000000 0 root 0 1






 
+
-
edit
 

Mishka

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


Чтобы прекратить бессмысленный спор про семафоры, вот ссылки на книги и выдержки из них:


Unix Network Programming by W. Richard Stevens. Prntice Hall Software Series, 1990, ISBN 0-13-949876-1


pp. 121-169,


...IPC channels, however, are system wide and not process specific. We obtain an IPC identifier (similar to a file descriptor) from one of the get systm calls - msgget, semget, and shmget.



Unix Network Programming by W. Richard Stevens. Second Edition. Volume II. Prntice Hall PTR, 1999, ISBN 0-13-081081-9


pp. 27-41, 281-300.


p.35


... (explanation of Figure 3.7 - Mishka) Each time around the loop msgget creates a message queue< and then msgctl with command of IPC_RMDIR deletes the queue.



p. 36


3.7 ipcs and ipcrm Programs


Since the three types of System V IPC are not identified by pathnames in the filesystem, we cannot look at them or remove them using the standard ls and rm programs. Instead, two special programs are provided by any system that implementsthese types of IPC: ipcs and ipcrm, which removes a System V message queue, semaphore set, or shared memory segment. The former supports about a dozen command-line options? which affect which of these three types of IPC is reported and what information is output? and the latter supports six command-line options. Consult your manual pages for the details of all these options/


Since System V IPC is not a part of Posix, these two commands are not standardized by Posix 2. But these two commands are of Unix 98.

 
US ComputerMage #29.05.2003 16:26
+
-
edit
 

ComputerMage

втянувшийся

>Чтобы прекратить бессмысленный спор про семафоры, вот ссылки на книги и выдержки из них:

Согласен, вчера сам перерыл кучу документации на эту тему. Стормозил. Иногда со мной такое происходит =)

Просто в таком случае происходит логичская неувязка, Апач не может переиспользовать уже существующие семафоры, и генерит новые. Тоесть что-то типа лика.

Хорошо, какое бы решение данной проблемы ты предложил?
Быть или не быть?!
Вот только у кого спросить?!
 
+
-
edit
 

Mishka

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


Копать надо. Есть такое ощущение, что Индеец по стопу не выходит, потому, что на этих семафорах и ждет. Поэтому я бы пробовал отыскать, кто еще семафорами пользуется и понять почему это так. Но это требует нехилого времени, которого как всегда нет. В упрощенном варианте, я бы до убийства Индейца пробовал бы их (семафоры) убрать используя ту же ipcrm. Дело тут в том, что когда семафор убирается таким образом (все равно внутри вызов semctl стоит с IPC_RMDIR и  root-овские полномочия нужны или те же маски, что у создателя семафора), то всем процессам, ожидающим на этих семафорах посылается сигнал wakeup. Прогноз мой такой, что Индеец должен закончиться после этого. Проблема тут в том, что другие процессы должны специальным образом обработать ситуация, когда из под них выдергивают табуретку. Кстати, если посыпятся, то это косвено укажет на тех, кто пользовался ими.


Надо бы Индейца переводить на POSIX - там все эти IPC храняться в файловой системе (специальной - примерно как /proc, если не ошибаюсь) и их можно штатными средствами обнаруживать.
 
US [ComputerMage] #29.05.2003 18:43
+
-
edit
 


>Копать надо. Есть такое ощущение, что Индеец по стопу не выходит, потому, что на этих семафорах и ждет. Поэтому я бы пробовал отыскать, кто еще семафорами пользуется и понять почему это так. Но это требует нехилого времени, которого как всегда нет. В упрощенном варианте, я бы до убийства Индейца пробовал бы их (семафоры) убрать используя ту же ipcrm. Дело тут в том, что когда семафор убирается таким образом (все равно внутри вызов semctl стоит с IPC_RMDIR и  root-овские полномочия нужны или те же маски, что у создателя семафора), то всем процессам, ожидающим на этих семафорах посылается сигнал wakeup. Прогноз мой такой, что Индеец должен закончиться после этого. Проблема тут в том, что другие процессы должны специальным образом обработать ситуация, когда из под них выдергивают табуретку. Кстати, если посыпятся, то это косвено укажет на тех, кто пользовался ими.


Надо бы Индейца переводить на POSIX - там все эти IPC храняться в файловой системе (специальной - примерно как /proc, если не ошибаюсь) и их можно штатными средствами обнаруживать.





У меня тут в голове две идеи крутится:

1. Сделать чтото пререгистрации процесса для пользования данным сетом семафоров, тогда всегда можно знать, кто претендует на этот сет, таким образом упрощается процесс удаления.

2. Посадить кернелевый сигнал хандлер, которы
 
US ComuterMage #29.05.2003 19:11
+
-
edit
 


>>Копать надо. Есть такое ощущение, что Индеец по стопу не выходит, потому, что на этих семафорах и ждет. Поэтому я бы пробовал отыскать, кто еще семафорами пользуется и понять почему это так. Но это требует нехилого времени, которого как всегда нет. В упрощенном варианте, я бы до убийства Индейца пробовал бы их (семафоры) убрать используя ту же ipcrm. Дело тут в том, что когда семафор убирается таким образом (все равно внутри вызов semctl стоит с IPC_RMDIR и  root-овские полномочия нужны или те же маски, что у создателя семафора), то всем процессам, ожидающим на этих семафорах посылается сигнал wakeup. Прогноз мой такой, что Индеец должен закончиться после этого. Проблема тут в том, что другие процессы должны специальным образом обработать ситуация, когда из под них выдергивают табуретку. Кстати, если посыпятся, то это косвено укажет на тех, кто пользовался ими.


Надо бы Индейца переводить на POSIX - там все эти IPC храняться в файловой системе (специальной - примерно как /proc, если не ошибаюсь) и их можно штатными средствами обнаруживать.

ComputerMage>У меня тут в голове две идеи крутится:
ComputerMage>1. Сделать чтото пререгистрации процесса для пользования данным сетом семафоров, тогда всегда можно знать, кто претендует на этот сет, таким образом упрощается процесс удаления.
ComputerMage>2. Посадить кернелевый сигнал хандлер, который будет пробегать по таскам и следить у кого в очереди висит этот sigid
 
+
-
edit
 

Mishka

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


ComputerMage>>У меня тут в голове две идеи крутится:
ComputerMage>>1. Сделать чтото пререгистрации процесса для пользования данным сетом семафоров, тогда всегда можно знать, кто претендует на этот сет, таким образом упрощается процесс удаления.


А как это enforce? Опять advisory получиться и нет никакой гарантии, что все будут этому следовать... :(



ComputerMage>>2. Посадить кернелевый сигнал хандлер, который будет пробегать по таскам и следить у кого в очереди висит этот sigid



Так -9 один из 2 сигналов, которые не могут перехватываться процессом. Или я чего не понял?


 
US [ComputerMage] #30.05.2003 01:31
+
-
edit
 


ComputerMage>>>У меня тут в голове две идеи крутится:
ComputerMage>>>1. Сделать чтото пререгистрации процесса для пользования данным сетом семафоров, тогда всегда можно знать, кто претендует на этот сет, таким образом упрощается процесс удаления.


> А как это enforce? Опять advisory получиться и нет никакой гарантии, что все будут этому следовать... :(



ComputerMage>>>2. Посадить кернелевый сигнал хандлер, который будет пробегать по таскам и следить у кого в очереди висит этот sigid



>Так -9 один из 2 сигналов, которые не могут перехватываться процессом. Или я чего не понял?



>

Я говорю про кернелевый хандлер =) Если процесс киллается, кто по твоему занимается чисткой всего что с ним связано? Я же тебе уже приводил примеры кода.


Ладно еще раз приведу:


[/span]
CODE
Created with colorer-take5 library. Type 'cpp'  [color=#696969; ]/*[/color] [color=#696969; ] * sig_exit - cause the current task to exit due to a signal.[/color] [color=#696969; ] */[/color]  void sig_exit[color=#808030; ]([/color]int sig[color=#808030; ],[/color] int exit_code[color=#808030; ],[/color] struct siginfo [color=#808030; ]*[/color]info[color=#808030; ])[/color] [color=#800080; ]{[/color]         struct task_struct [color=#808030; ]*[/color]t[color=#800080; ];[/color]          sigaddset[color=#808030; ]([/color][color=#808030; ]&[/color]amp[color=#800080; ];[/color]current[color=#808030; ]-[/color][color=#808030; ]>[/color]pending[color=#808030; ].[/color]signal[color=#808030; ],[/color] sig[color=#808030; ])[/color][color=#800080; ];[/color]         recalc_sigpending[color=#808030; ]([/color]current[color=#808030; ])[/color][color=#800080; ];[/color]         current[color=#808030; ]-[/color][color=#808030; ]>[/color]flags \[color=#808030; ]|[/color][color=#808030; ]=[/color] PF_SIGNALED[color=#800080; ];[/color]                                            [color=#696969; ]/* Propagate the signal to all the tasks in[/color] [color=#696969; ]         *  our thread group      [/color] [color=#696969; ]         */[/color]         if [color=#808030; ]([/color]info [color=#808030; ]&[/color]amp[color=#800080; ];[/color][color=#808030; ]&[/color]amp[color=#800080; ];[/color] [color=#808030; ]([/color]unsigned long[color=#808030; ])[/color]info [color=#808030; ]![/color][color=#808030; ]=[/color] [color=#008c00; ]1[/color]             [color=#808030; ]&[/color]amp[color=#800080; ];[/color][color=#808030; ]&[/color]amp[color=#800080; ];[/color] info[color=#808030; ]-[/color][color=#808030; ]>[/color]si_code [color=#808030; ]![/color][color=#808030; ]=[/color] SI_TKILL[color=#808030; ])[/color] [color=#800080; ]{[/color]                 read_lock[color=#808030; ]([/color][color=#808030; ]&[/color]amp[color=#800080; ];[/color]tasklist_lock[color=#808030; ])[/color][color=#800080; ];[/color]                 for_each_thread[color=#808030; ]([/color]t[color=#808030; ])[/color] [color=#800080; ]{[/color]                         force_sig_info[color=#808030; ]([/color]sig[color=#808030; ],[/color] info[color=#808030; ],[/color] t[color=#808030; ])[/color][color=#800080; ];[/color]                 [color=#800080; ]}[/color]                 read_unlock[color=#808030; ]([/color][color=#808030; ]&[/color]amp[color=#800080; ];[/color]tasklist_lock[color=#808030; ])[/color][color=#800080; ];[/color]                                                           [color=#800080; ]}[/color]                                                                                                                                                                                              do_exit[color=#808030; ]([/color]exit_code[color=#808030; ])[/color][color=#800080; ];[/color]                                                                             [color=#696969; ]/* NOTREACHED */[/color]                                                                       [color=#800080; ]}[/color]     Он вызывается из архитектуро[color=#808030; ]-[/color]зависимых частей кернела[color=#808030; ],[/color] вот пример из arch[color=#808030; ]/[/color]i386[color=#808030; ]/[/color]signal[color=#808030; ].[/color]c  [color=#696969; ]/*                                                                                                               [/color] [color=#696969; ] * Note that 'init' is a special process: it doesn't get signals it doesn't                                      [/color] [color=#696969; ] * want to handle. Thus you cannot kill init even with a SIGKILL even by                                         [/color] [color=#696969; ] * mistake.                                                                                                      [/color] [color=#696969; ] */[/color]                                                                                                               int do_signal[color=#808030; ]([/color]struct pt_regs [color=#808030; ]*[/color]regs[color=#808030; ],[/color] sigset_t [color=#808030; ]*[/color]oldset[color=#808030; ])[/color]                                                             [color=#800080; ]{[/color]     [color=#696969; ]/* тут я скипну чуток кода =) */[/color]                          switch [color=#808030; ]([/color]signr[color=#808030; ])[/color] [color=#800080; ]{[/color]                                                                                                 case SIGCONT[color=#808030; ]:[/color] case SIGCHLD[color=#808030; ]:[/color] case SIGWINCH[color=#808030; ]:[/color] case SIGURG[color=#808030; ]:[/color]                                                                   continue[color=#800080; ];[/color]                                                                                                                                                                                                                  case SIGTSTP[color=#808030; ]:[/color] case SIGTTIN[color=#808030; ]:[/color] case SIGTTOU[color=#808030; ]:[/color]                                                                                 if [color=#808030; ]([/color]is_orphaned_pgrp[color=#808030; ]([/color]current[color=#808030; ]-[/color][color=#808030; ]>[/color]pgrp[color=#808030; ])[/color][color=#808030; ])[/color]                                                                                     continue[color=#800080; ];[/color]                                                                                                 [color=#696969; ]/* FALLTHRU */[/color]                                                                                                                                                                                                            case SIGSTOP[color=#808030; ]:[/color] [color=#800080; ]{[/color]                                                                                                           struct signal_struct [color=#808030; ]*[/color]sig[color=#800080; ];[/color]                                                                                       current[color=#808030; ]-[/color][color=#808030; ]>[/color]state [color=#808030; ]=[/color] TASK_STOPPED[color=#800080; ];[/color]                                                                                   current[color=#808030; ]-[/color][color=#808030; ]>[/color]exit_code [color=#808030; ]=[/color] signr[color=#800080; ];[/color]                                                                                       sig [color=#808030; ]=[/color] current[color=#808030; ]-[/color][color=#808030; ]>[/color]p_pptr[color=#808030; ]-[/color][color=#808030; ]>[/color]sig[color=#800080; ];[/color]                                                                                       if [color=#808030; ]([/color]sig [color=#808030; ]&[/color]amp[color=#800080; ];[/color][color=#808030; ]&[/color]amp[color=#800080; ];[/color] [color=#808030; ]![/color][color=#808030; ]([/color]sig[color=#808030; ]-[/color][color=#808030; ]>[/color]action[color=#808030; ][[/color]SIGCHLD[color=#808030; ]-[/color][color=#008c00; ]1[/color][color=#808030; ]][/color][color=#808030; ].[/color]sa[color=#808030; ].[/color]sa_flags [color=#808030; ]&[/color]amp[color=#800080; ];[/color] SA_NOCLDSTOP[color=#808030; ])[/color][color=#808030; ])[/color]                                                         notify_parent[color=#808030; ]([/color]current[color=#808030; ],[/color] SIGCHLD[color=#808030; ])[/color][color=#800080; ];[/color]                                                                         schedule[color=#808030; ]([/color][color=#808030; ])[/color][color=#800080; ];[/color]                                                                                                       continue[color=#800080; ];[/color]                                                                                                 [color=#800080; ]}[/color]                                                                                                                                                                                                                                  case SIGQUIT[color=#808030; ]:[/color] case SIGILL[color=#808030; ]:[/color] case SIGTRAP[color=#808030; ]:[/color]                                                                         case SIGABRT[color=#808030; ]:[/color] case SIGFPE[color=#808030; ]:[/color] case SIGSEGV[color=#808030; ]:[/color]                                                                         case SIGBUS[color=#808030; ]:[/color] case SIGSYS[color=#808030; ]:[/color] case SIGXCPU[color=#808030; ]:[/color] case SIGXFSZ[color=#808030; ]:[/color]                                                                     if [color=#808030; ]([/color]do_coredump[color=#808030; ]([/color]signr[color=#808030; ],[/color] regs[color=#808030; ])[/color][color=#808030; ])[/color]                                                                                             exit_code \[color=#808030; ]|[/color][color=#808030; ]=[/color] [color=#008000; ]0x80[/color][color=#800080; ];[/color]                                                                                       [color=#696969; ]/* FALLTHRU */[/color]                                                                                                                                                                                                            default[color=#808030; ]:[/color]                                                                                                                 sig_exit[color=#808030; ]([/color]signr[color=#808030; ],[/color] exit_code[color=#808030; ],[/color] [color=#808030; ]&[/color]amp[color=#800080; ];[/color]info[color=#808030; ])[/color][color=#800080; ];[/color]                                                                               [color=#696969; ]/* NOTREACHED */[/color]                                                                                         [color=#800080; ]}[/color]                  [color=#800080; ]}[/color]                                                                                                                                                                                                                                  [color=#696969; ]/* Reenable any watchpoints before delivering the                                                [/color] [color=#696969; ]                 * signal to user space. The processor register will                                             [/color] [color=#696969; ]                 * have been cleared if the watchpoint triggered                                                 [/color] [color=#696969; ]                 * inside the kernel.                                                                            [/color] [color=#696969; ]                 */[/color]                                                                                                               __asm__[color=#808030; ]([/color][color=#0000e6; ]"movl %0,%[/color][color=#0f69ff; ]%d[/color][color=#0000e6; ]b7"[/color] [color=#808030; ]:[/color] [color=#808030; ]:[/color] [color=#0000e6; ]"r"[/color] [color=#808030; ]([/color]current[color=#808030; ]-[/color][color=#808030; ]>[/color]thread[color=#808030; ].[/color]debugreg[color=#808030; ][[/color][color=#008c00; ]7[/color][color=#808030; ]][/color][color=#808030; ])[/color][color=#808030; ])[/color][color=#800080; ];[/color]                                                                                                                                                                    [color=#696969; ]/* Whee!  Actually deliver the signal.  */[/color]                                                                       handle_signal[color=#808030; ]([/color]signr[color=#808030; ],[/color] ka[color=#808030; ],[/color] [color=#808030; ]&[/color]amp[color=#800080; ];[/color]info[color=#808030; ],[/color] oldset[color=#808030; ],[/color] regs[color=#808030; ])[/color][color=#800080; ];[/color]                                                                   return [color=#008c00; ]1[/color][color=#800080; ];[/color]                                                                                                 }  А вот и сам пресловутый do_exit[color=#808030; ]([/color][color=#808030; ])[/color][color=#808030; ]:[/color]  NORET_TYPE void Do_exit[color=#808030; ]([/color]long code[color=#808030; ])[/color] [color=#800080; ]{[/color]         struct task_struct [color=#808030; ]*[/color]tsk [color=#808030; ]=[/color] current[color=#800080; ];[/color]          if [color=#808030; ]([/color]in_interrupt[color=#808030; ]([/color][color=#808030; ])[/color][color=#808030; ])[/color]                 panic[color=#808030; ]([/color][color=#0000e6; ]"Aiee, killing interrupt handler!"[/color][color=#808030; ])[/color][color=#800080; ];[/color]         if [color=#808030; ]([/color][color=#808030; ]![/color]tsk[color=#808030; ]-[/color][color=#808030; ]>[/color]pid[color=#808030; ])[/color]                 panic[color=#808030; ]([/color][color=#0000e6; ]"Attempted to kill the idle task!"[/color][color=#808030; ])[/color][color=#800080; ];[/color]         if [color=#808030; ]([/color]tsk[color=#808030; ]-[/color][color=#808030; ]>[/color]pid [color=#808030; ]=[/color][color=#808030; ]=[/color] [color=#008c00; ]1[/color][color=#808030; ])[/color]                 panic[color=#808030; ]([/color][color=#0000e6; ]"Attempted to kill init!"[/color][color=#808030; ])[/color][color=#800080; ];[/color]         tsk[color=#808030; ]-[/color][color=#808030; ]>[/color]flags \[color=#808030; ]|[/color][color=#808030; ]=[/color] PF_EXITING[color=#800080; ];[/color]         del_timer_sync[color=#808030; ]([/color][color=#808030; ]&[/color]amp[color=#800080; ];[/color]tsk[color=#808030; ]-[/color][color=#808030; ]>[/color]real_timer[color=#808030; ])[/color][color=#800080; ];[/color]  fake_volatile[color=#808030; ]:[/color] [color=#004a43; ]#[/color]ifdef[color=#004a43; ] CONFIG_BSD_PROCESS_ACCT[/color]         acct_process[color=#808030; ]([/color]code[color=#808030; ])[/color][color=#800080; ];[/color] [color=#004a43; ]#[/color]endif[color=#004a43; ]          [/color]         __exit_mm[color=#808030; ]([/color]tsk[color=#808030; ])[/color][color=#800080; ];[/color]                                   lock_kernel[color=#808030; ]([/color][color=#808030; ])[/color][color=#800080; ];[/color]                   sem_exit[color=#808030; ]([/color][color=#808030; ])[/color][color=#800080; ];[/color]             __exit_files[color=#808030; ]([/color]tsk[color=#808030; ])[/color][color=#800080; ];[/color]                                                                             __exit_fs[color=#808030; ]([/color]tsk[color=#808030; ])[/color][color=#800080; ];[/color]                                                                                 exit_namespace[color=#808030; ]([/color]tsk[color=#808030; ])[/color][color=#800080; ];[/color]                                                                           exit_sighand[color=#808030; ]([/color]tsk[color=#808030; ])[/color][color=#800080; ];[/color]                                                                             exit_thread[color=#808030; ]([/color][color=#808030; ])[/color][color=#800080; ];[/color]                                                                                                                                                                                if [color=#808030; ]([/color]current[color=#808030; ]-[/color][color=#808030; ]>[/color]leader[color=#808030; ])[/color]                                                                                   disassociate_ctty[color=#808030; ]([/color][color=#008c00; ]1[/color][color=#808030; ])[/color][color=#800080; ];[/color]                                                                                                                                                                  put_exec_domain[color=#808030; ]([/color]tsk[color=#808030; ]-[/color][color=#808030; ]>[/color]exec_domain[color=#808030; ])[/color][color=#800080; ];[/color]                                                             if [color=#808030; ]([/color]tsk[color=#808030; ]-[/color][color=#808030; ]>[/color]binfmt [color=#808030; ]&[/color]amp[color=#800080; ];[/color][color=#808030; ]&[/color]amp[color=#800080; ];[/color] tsk[color=#808030; ]-[/color][color=#808030; ]>[/color]binfmt[color=#808030; ]-[/color][color=#808030; ]>[/color]module[color=#808030; ])[/color]                                                                 __MOD_DEC_USE_COUNT[color=#808030; ]([/color]tsk[color=#808030; ]-[/color][color=#808030; ]>[/color]binfmt[color=#808030; ]-[/color][color=#808030; ]>[/color]module[color=#808030; ])[/color][color=#800080; ];[/color]                                                                                                                                              tsk[color=#808030; ]-[/color][color=#808030; ]>[/color]exit_code [color=#808030; ]=[/color] code[color=#800080; ];[/color]                                                                         exit_notify[color=#808030; ]([/color][color=#808030; ])[/color][color=#800080; ];[/color]                                                                                 schedule[color=#808030; ]([/color][color=#808030; ])[/color][color=#800080; ];[/color]                                                                                     BUG[color=#808030; ]([/color][color=#808030; ])[/color][color=#800080; ];[/color]                                                                                 [color=#800080; ]}[/color]
[span class='postcolor']


где вызывается sem_exit() и exit_sighand(tsk);



То есть можно их задействовать.


PS: Жду твоего мнения.
 
Это сообщение редактировалось 30.05.2003 в 11:30
+
-
edit
 

Balancer

администратор
★★★★☆
Чуток подкрасил через [code cpp] :)
 
US ComputerMage #30.05.2003 05:17
+
-
edit
 

ComputerMage

втянувшийся



Balancer>Чуток подкрасил через [code cpp] :)

Кстати, у меня ничего не показывется подкрашеным. Всё чёрным цветом, но в рамке :D


Мож чего-то не так? Мож сделать зарезервированные слова жирным?

Быть или не быть?!
Вот только у кого спросить?!
 
+
-
edit
 

Balancer

администратор
★★★★☆
Весь прикол в том, что в Опере - всё ок. А раскраска - банальная, через span/style/color. Надо исходники колорера перешерстить и всё в вид font/color прегнать. Хоть и устаревший тип подкраски, но менее глючный :)
 
+
-
edit
 

Balancer

администратор
★★★★☆


А! Нашёл! Блин, доска, конечно, мощная (форум), но писатели по уровню кода - ПТУ-шники... :( Сейчас должно быть ок и в других браузерах. Опера просто ошибки сама исправляет :)


Осталось только ещё приличное редактирование для не-WYSIWYG-браузеров добавить и совсем всё хорошо будет...
 
+
-
edit
 

Mishka

модератор
★★☆
ComputerMage>Я говорю про кернелевый хандлер =) Если процесс киллается, кто по твоему занимается чисткой всего что с ним связано? Я же тебе уже приводил примеры кода.


Ладно еще раз приведу:


>где вызывается sem_exit() и exit_sighand(tsk);



>То есть можно их задействовать.


PS: Жду твоего мнения.


Я опять не врубился, что ты говоришь про кернел - пардон.

Понимаешь, это очень здорово меняет семантику семафоров. Боюсь я делать такие правки. Больно много программ может пострадать.

Не очень понятно, почему индеец не переиспользует семафоры после старта - ключи как раз для этого и предназначены - уникальной идентификации.
 
+
-
edit
 

Balancer

администратор
★★★★☆
Уф. Новый глюк. С час назад перестал работала работать авторизация по FTP. Т.е. по ssh входит прекрасно, юзверей по su переключает. При попытке зайти по FTP - "530 Login incorrect." Пароль менял, xinetd перезапускал. Открытая до этого глюка FTP-сессия работала нормально, пока по таймауту от бездействия не померла. Стоит дефолтовый wuftpd. Во всяких bin/sbin никаких модификаций с мая, в /etc - тоже. Что это может быть за нафиг?
 
RU asoneofus #11.07.2003 19:52
+
-
edit
 

asoneofus

старожил

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

Balancer

администратор
★★★★☆
Гм. Да. До логов сразу не допёр посмотреть :) В логах ftpd ругался на то, что ему никто не даёт прав на его /etc/ftphosts и т.п. И вправду, они все принадлежат root:root с парвами 0600. Дал 0644. Теперь пишет:

Jul 11 19:59:14 airbase ftpd[13008]: wu-ftpd - TLS settings: control allow, client_cert allow, dat
Jul 11 19:59:14 airbase ftpd[13008]: failed login from 80.251.142.22 [80.251.142.22]
Jul 11 19:59:14 airbase ftpd[13008]: FTP session closed
 
RU asoneofus #12.07.2003 17:45
+
-
edit
 

asoneofus

старожил

Тут, ИМХО, уже чистоганом настройки глядеть надо...
Кстати, а кто права поменял??
"... аще где в книге сей грубостию моей пропись или небрежением писано, молю Вас: не зазрите моему окаянству, не кляните, но поправьте, писал бо не ангел Божий, но человек грешен и зело исполнен неведения ..."  
+
-
edit
 

Balancer

администратор
★★★★☆
Никто не менял. 0600 и положены, как показали сравнения с работающим RH7.3 Другое дело, что этих 0600 почему-то перестало хватать для FTP.
 
RU asoneofus #12.07.2003 20:13
+
-
edit
 

asoneofus

старожил

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

Mishka

модератор
★★☆
Balancer>Никто не менял. 0600 и положены, как показали сравнения с работающим RH7.3 Другое дело, что этих 0600 почему-то перестало хватать для FTP.



Тогда либо ФТП должен от рута запускаться, либо битик смены прав на лету должен стоять — кто-то их поменял — чудес не бывает.
 
+
-
edit
 

Balancer

администратор
★★★★☆
Mishka>Тогда либо ФТП должен от рута запускаться


Вот тут-то ларчик и открывался. У меня ftpd за каким-то рожном стал запускаться от имени airbase :) Самое забавное, что я так и не понял, как это произошло. Вероятно, когда-то зачем-то поменял, а xinetd не перезапустил. А тут или я его не заметив, перезапустил, то ли он сам... :) Вот ftp и начал от нового имени стартовать :)
 

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