Puncte:3

Ieșirea din terminal vs Închiderea terminalului

drapel br

Context:-

Rulez un proces în bash cu & atașat, adică în modul de fundal. Procesul are o în timp ce (1) adică va rula pentru totdeauna. Bash-ul meu este părinte și procesul meu devine copilul. Vreau să aflu cum se ocupă Kernel-ul cu copilul când părintele este terminat.

Observatii:-

  1. Dacă ies din terminal (folosind Ieșire comanda de la terminal), /lib/systemd/systemd --user devine procesul parental al copilului
  2. Dacă opresc procesul terminal (folosind ucide) de la alt terminal, același rezultat ca mai sus
  3. Dacă închid terminalul folosind pictograma încrucișată, procesul copil este și el terminat

Întrebare:-

Cum este închiderea diferită de uciderea/ieșirea?

sudodus avatar
drapel jp
Ce versiune (20.04.x ​​LTS?) și ce aromă (Ubuntu Desktop, Kubuntu, Lubuntu ... Xubuntu?) rulați? Ce emulator de terminal rulați (gnome-terminal sau...?) Ce proces copil este (este un program compilat, un shellscript...; rulează în propria fereastră sau în fundal sau în terminalul original? fereastră)?
Saad Abdul Majid avatar
drapel br
@sudodus, greseala mea pentru lipsa de informatii. Aici: Ubuntu Desktop, 18.04.5 LTS, gnome-terminal, program compilat care rulează în fereastra terminalului
Puncte:1
drapel us
shk

Există diferite tipuri de semnale în Linux. Cand tu Ieșire terminal, semnalul trimis este diferit de semnalul care este trimis atunci când închideți terminalul făcând clic pe X. Încearcă să treci prin semnale de terminare pentru a afla cât de diferită este între închiderea și ieșirea terminalului.

Zanna avatar
drapel kr
Am trecut prin el și încă nu știu ce semnal este trimis când închidem fereastra emulatorului de terminal sau ce semnal este trimis când scriem `exit` în terminal. Vă rugăm să detaliați și să explicați ce semnale sunt trimise și diferența dintre ele?
Puncte:0
drapel jp

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.

Puncte:0
drapel pe

Procesul a început așa ./myprocess & sunt copiii părintelui bash proces deschis de programul terminal. Semnul & nu vă va ajuta să închideți fereastra terminalului înainte de sfârșitul unui proces lung.

Ceea ce cauți este comanda nohup

utilizator@gazdă:~$ nohup bash -c '/cale/la/procesul meu'

Mai multe informatii : http://manpages.ubuntu.com/manpages/impish/en/man1/nohup.1.html
Cateva exemple: https://linuxhint.com/nohup_command_linux/

Saad Abdul Majid avatar
drapel br
Trebuie doar să știu motivul din spatele observațiilor mele. Pentru a înțelege ceea ce observ. Cred că este vorba despre semnalul care este trimis către procese.
drapel pe
@Saad Abdul Majid: vezi prima parte a răspunsului meu, închiderea ferestrei terminalului distruge procesul părinte bash

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.