Miroslav Lachman wrote on 12. 3. 2020 16:45:
Zil jsem v domeni, ze kdyz se prerusi SSH spojeni, tak proces, ktery byl spusten uzivatelem skrz to SSH spojeni, se taky ukonci.

Hacek je zakopany v presnem popisu.

A ten se ti dokonce (asi neumyslne) podaril. Skutecne - *proces* se ukonci. Myslim aktivne - musi to udelat on. No a nektery proces se proste neukonci.

Tak ja to radsi popisu jinak.

Kdyz spadne SSHD, proces by od nej mel dostat signal SIGHUP. Signal je procesem prijat a obslouzen, pricemz defaultni obsluzna rutina aktivne ukonci proces (sama sebe). Ale konkretni proces nemusi nechat reagovat defaultni obsluznou rutinu, muze instalovat vlastni nebo aktivovat "igoruj" obsluhu signalu ...

Rodicem toho procesu se stal PID 1 (init).

Kdyz umre rodicovsky proces a child neskonci, pak se jeho rodicem stava init.

A jak tomu zabranit?

Pokud ...
1. nejde o chybu SSHD (dokaze zabranit tomu, aby se pri jeho konci detem SIGHUP poslal)
2. nejde o chybu systemu (odeslany signal se nedoruci)
pricemz
na tyhle chyby to nevypada, kdyz u jinych procesu to funguje spravne
tak jde o
3. chybu procesu, ktery se rozhodne se neukoncovat.

Mozne reseni:
a) oprava procesu aby se takhle nechoval (muze to byt chyba PHP nebo dusledek vady interpretovaneho PHP kodu)
nebo
b) napsat wrapper, spoustet ze sshd ten a ktery teprve bude volat postizeny proces a ktery bud etransparentni az na ten SIGHUP, ktery nebude dolu predavat 1:1 a misto nej posle jiny signal, na ktery proces reagovat ochotny je, propadne SIGKILL, ktery sam obslouzit (a tedy ignorovat) nemuze.

Zrovna v tomhle pripade bych potreboval, aby ten proces taky umrel. I kdyz mi neco naseptava, ze neni normalni ani to, ze tam ten proces zustane bezet klidne 20 hodin a zere veskery CPU (tzn. je tam neco hodne spatne)


Zrejme dalsi prizmak vady toho SW.
Tak mu omez maximalni dovoleny spotrebovany cas procesoru. Po prelezeni sift limitu dostane SIGXCPU coz ho defaultne taky ukonci, ale i tohle muze ignorovat. Prelezeni hard limitu by ale uz prezit nemel.

Dan
--
FreeBSD mailing list (users-l@freebsd.cz)
http://www.freebsd.cz/listserv/listinfo/users-l

Odpovedet emailem