Terminal bezárásakor agyoncsap minden folyamatot az Ubuntu?

Fórumok

Miért lő le minden folyamatot az Ubuntu egy desktopról indított terminal bezárásakor?
egyetlen sudo /etc/init.d/crasplan-t kellene elindítani egy szimpla scriptből. De amint bezáródik a gnome-terminal ablak egyből leáll a crashplan is.
Mit kell írni a scriptbe, hogy ne lője le a rendszer?

Hozzászólások

Gondolom, SIGHUP-ot kap a gyermekfolyamat. Én így szoktam:

programom & exit

A másik lehetőség:

nohup programom </dev/null &>/dev/null &

aztán bezárhatod a terminált.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Nem tudom, mi ez, de muszáj terminálban futtatni?

Lehet, én elkezdeném debugolni, mi is történik. Például írnék egy olyan scriptet, amelynek a signal handler-ében file-ba tenném vagy zenity-vel a képernyőre feldobnám, milyen signalt kapott. Egyedül a SIGKILL ellen nem lehet így védekezni, de ezzel nyilván nem él az adott desktop környezet. Ha megvan, milyen signalt kell elkapni, akkor a rendes scriptbe bele kell írni, hogy arra immunis legyen.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Egyszerűen annyi, hogy nem akarjuk állandóan futtatni a crashplan-t és az időszakos backup sem megoldás, mert van amikor egész nap mehet máskor csak éjjel. Annál a gépnél ülő munkatársnak kell egy ikon a desktopra, ha nem dolgozik elinditja. Ha beirná egy terminálba, hogy

sudo /etc/init.d/crashplan start

akkor azzal problémamentesen elindulna, utána be is lehetne zárni a terminált, akkor nem áll le. De sajnos ennél a gépnél ülő munkatárs védőoltást kapott parancssor használata ellen.

És mi történik, ha parancsikonnal indítod, de azt mondod neki, ne használjon hozzá terminált? (A desktop környezetnek ez egy tökéletesen haszontalan funkciója egyébként. Amihez kell terminál, arra is azt mondom, hogy nem kell, majd xfce4-terminal -e valami formában indítom. De neked még csak nem is kell terminál szerintem. Minek?)

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Ebből az látszik, hogy a scriptből kilépéskor hal meg. Ezek szerint a crashplan szülője küldi - gondolom - a SIGHUP-ot. Tehát vagy a crashplant indítod nohuppal, vagy a scriptedet futtatod mindaddig, amíg ez a crashplan fut. Például percenként ránézel pgrep-pel. Ha benvan a process, újabb sleep 1m, ha nincs benn, akkor ki lehet lépni.

Mindenképpen megoldható, sok ötlet "elhangzott" itt, rajtad áll, hogyan csinálod.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

További lehetőséget, hogy a scripted egy trap paranccsal elkapja a SIGHUP-ot, végrehajtásként nem csinál semmit, így nem fog elpusztulni, ha jön a HUP signal.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

disown

~~~~~~~~
Linux 3.2.0-4-486
Debian 7.1

Még egy tipp:

ikon parancsa:

sudo /usr/local/bin/starterszkript.sh

/usr/local/bin/starterszkript.sh tartalma:

echo /etc/init.d/crasplan | at now

Ez a gnome-terminal helyes viselkedése...

Ha már Ubuntu: ALT+F2-t próbáltad már?

Sracok, alap UNIX:

Folyamat hatterben futtatasa:

process &

man bash:
" If a command is terminated by the control operator &, the shell exe-
cutes the command in the background in a subshell. The shell does not
wait for the command to finish, and the return status is 0. Commands
separated by a ; are executed sequentially; the shell waits for each
command to terminate in turn. The return status is the exit status of
the last command executed."
(De ezt megcsinalha a csh, zsh, ksh, barmi)
Vagy, ha nem akarod, hogy a hangupra halgasson:

nohup process

man nohup:

" The nohup utility invokes utility with its arguments and at this time
sets the signal SIGHUP to be ignored. If the standard output is a termi-
nal, the standard output is appended to the file nohup.out in the current
directory. If standard error is a terminal, it is directed to the same
place as the standard output."

Ne szidd le, én is helyből az új hozzászólásra akartam kattintani, de aztán megembereltem magam, mondván hátha van más is aki az alapvető dolgok viselkedésével tisztában van, és nálam gyorsabb volt. (Bár az is tény, hogy láttam már olyan shellt is, amelyik a háttérprocesszt automatikusan nohup-pal indította - vagy kapcsolható volt? A franc se emlékszik ennyire pontosan.)