( vl | 2021. 06. 23., sze – 20:53 )

Ha nincs terminál (lásd ssh -t és -T), akkor a távoli gyerek csak attól fog meghalni, mert megpróbál beleolvasni az stdinbe, és ott EOF-ot kap, vagy megpróbál beleírni az stdout/stderr-be, és hibát (meg by default SIGPIPE-ot) kap. Ha a távoli gyerek nem olvas és nem ír, vagy eleve át van irányítva a /dev/null-ra mindene, akkor így nem fog leállni, csak ha explicite küldesz neki egy signalt.

Ha van terminál, akkor az más eset, mert ott a terminál fő processze fog kapni SIGHUP-ot, amivel aztán vagy kezd valamit, vagy nem. A shellek jellemzően szoktak, de ha eleve nem futtatsz shellt, akkor a programodnak kell eléggé okosnak lennie. Az külön plusz lépéseket igényel a shellből terminál alól indított programoknál, hogy túl tudják élni a shell távozását (lásd még hogyan írjunk daemonokat), tehát alapból a shell takarít. Amúgy nem tudom, hogy terminál használata esetén elkerülhető-e a shell funkcionalitás (úgy tippelném, hogy nem), azaz okés-e, hogy shell helyett eleve egy random programot indítasz az sshd alatt, ami nincs felkészítve arra a feladatra, amit egy shell a terminálon beállít induláskor. Nem lennék meglepve, ha a Ctrl-c és társai nem működnének korrektül ilyen esetekben. És persze a SIGHUP-ot is korrektül kéne kezelnie a random programnak.