obisnuiam ping
într-o gnome-terminal
fereastră și vă pot confirma observațiile. Cred că este problematic faptul că un proces poate fi lăsat să ruleze fără nicăieri unde să comunice. Voi încerca să interpretez ceea ce observ (dar nu pretind că înțeleg de ce, poate pentru a permite programelor cu propria interfață grafică să funcționeze fără nohup
dupa iesirea din bash
, când este pornit într-o fereastră de terminal).
Cand eu Ieșire
ies din bash
rulează în fereastra terminalului și ping
continuă să ruleze, dar nu are unde să scrie.
Cand eu ucide
procesul, îl ucid pe bash
proces în fereastra terminalului. Nu am gasit un explicit gnome-terminal
proces de a ucide, deoarece procesul /usr/lib/gnome-terminal/gnome-terminal-server
le conduce pe toate. Nu sunt sigur că asta făceai, dar asta cred.
Când închid fereastra (cu butonul x) ies din procesul ferestrei (care, la rândul său, forțează procesele sale secundare să nu mai includă bash
și ping
). Aceasta este o diferență evidentă față de cele două cazuri anterioare.
Când fac exercițiul corespunzător cu xterm
, va exista un proces separat cu numele „xterm”.
Cand eu Ieșire
ies din bash
rulează în fereastra terminalului și ping
continuă să ruleze, dar nu are unde să scrie.
Cand eu ucide
procesul, îl ucid pe xterm
proces al ferestrei terminalului, (care, la rândul său, forțează procesele sale secundare să se oprească, inclusiv bash
și ping
).
Când închid fereastra (cu butonul x) ies din procesul ferestrei (care, la rândul său, forțează procesele sale secundare să se oprească, inclusiv bash
și ping
).
Știi deja că poți folosi nohup
(impreuna cu &
) dacă doriți ca procesul copil să continue după închiderea ferestrei terminalului, unde a fost pornit procesul copil.
Editare 1: Comentariu final:
Din man bash
Dacă o comandă este terminată de operatorul de control &, shell
execută comanda în fundal într-un subshell. Cochilia face
nu așteptați ca comanda să se termine, iar starea de revenire este 0.
Am observat că nu există niciun semnal pentru a opri subshell-ul și procesul a început în/din acel subshell, când bash
este ieșit, cel puțin nu atunci când rulează într-o fereastră de terminal. Dar fereastra terminalului de apelare este închisă. Cred că, după ce se iese din bash, fereastra terminalului nu mai știe de subshell și procesul a început în/din acel subshell și, prin urmare, nu le poate opri.
Edit 2: Am cerut ajutor la Unix și Linux - Vă rugăm să citiți răspunsurile.