reparenting procesu po preruseni ssh spojeni

Dan Lukes dan at obluda.cz
Sat Mar 14 09:49:26 CET 2020


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


More information about the Users-l mailing list