де оболонка потрапляє в ієрархію процесу?


2

Коли ви відкриваєте новий термінал, він стає батьківським процесом усіх процесів, розщеплених всередині нього. Але де, наприклад, шкаралупа bash потрапляє в цей технологічний ланцюг? Чи є його батьківським терміналом? Чи всі процеси розщеплені всередині дітей оболонки оболонки? Якщо так, то коли я змінюю оболонки, чому процеси все ще залишаються запущеними? Словом, куди потрапляє оболонка в ієрархію процесів?

Відповіді:


2

Дійсно, батьком процесу bash є термінал. Ви можете бачити ієрархію процесів за допомогою ps -aefкоманди:

$ ps -aef
UID        PID  PPID  C STIME TTY          TIME CMD
[...]
sylvain   3510  1862  2 22:02 ?        00:00:01 gnome-terminal
[...]
sylvain   3520  3510  0 22:02 pts/1    00:00:00 bash
sylvain   3587  3520  0 22:03 pts/1    00:00:00 sh
  • PID: ідентифікатор процесу
  • PPID: батьківський процес ідентифікатор

У цьому прикладі я запустив shпроцес (3587) з bashоболонки (3520)


Як же, коли я міняю оболонку, процеси, що породжуються в оболонці, залишаються живими?
— ДжонМерліно

Наприклад, коли я запускаю процес в межах tmux в оболонці zsh, тоді я переключаюся на оболонку bash, tmux і процес всередині нього все ще працює. Чому ці процеси не загинули, коли я перейшов з zsh на bash?
— ДжонМерліно

Ви не можете "замінити" оболонку іншою, насправді обидва - це окремі процеси. Якщо ви введете exitв моєму прикладі, ви повернетесь до оболонки bash.
— Сільвен Піно

Тепер, коли я виходжу, tmux продовжує працювати, оскільки ігнорує сигнал nohup. Це означає, що tmux та його процеси не є дітьми bash чи терміналу?
— ДжонМерліно

Ви можете одночасно працювати декількома процесами bash, тим, хто запустив tmux, а другий розпочався процесом zsh (цей є дитиною tmux)
— Sylvain Pineau,

1

Існує хороші команди , які можуть допомогти вам зрозуміти речі тут: pstree.

Показати дерево процесу поточного процесу (в оболонці $$замінено PID оболонки):

(0)samsung-rmano:~% pstree -s $$
init───gdm───gdm-simple-slav───gdm-session-wor───init───gnome-terminal-───zsh───pstree

Показ PID:

(0)samsung-rmano:~% pstree -s -p $$
init(1)───gdm(1128)───gdm-simple-slav(1203)───gdm-session-wor(1933)───init(1955)───gnome-terminal-(2340)───zsh(23005)───pstree(23044)

Все дерево системного процесу з виділеною поточною оболонкою (відкрийте дуже великий термінал! --- підсвічування тут не видно):

 (0)samsung-rmano:~% pstree -h 
 ...
 ├─gdm─┬─gdm-simple-slav─┬─Xorg───4*[{Xorg}]
 │     │                 ├─gdm-session-wor─┬─init─┬─Notifications_h
 │     │                 │                 │      ├─Translator
 │     │                 │                 │      ├─at-spi-bus-laun─┬─dbus-daemon
 │     │                 │                 │      │                 └─3*[{at-spi-bus-laun}]
 │     │                 │                 │      ├─at-spi2-registr───{at-spi2-registr}
 │     │                 │                 │      ├─darktable───47*[{darktable}]
 │     │                 │                 │      ├─dbus-daemon
 │     │                 │                 │      ├─dconf-service───2*[{dconf-service}]
 │     │                 │                 │      ├─dropbox───30*[{dropbox}]
 │     │                 │                 │      ├─evolution-calen───4*[{evolution-calen}]
 │     │                 │                 │      ├─evolution-sourc───2*[{evolution-sourc}]
 │     │                 │                 │      ├─firefox─┬─plugin-containe───10*[{plugin-containe}]
 │     │                 │                 │      │         └─43*[{firefox}]
 │     │                 │                 │      ├─gconfd-2
 │     │                 │                 │      ├─gnome-session─┬─deja-dup-monito───2*[{deja-dup-monito}]
 │     │                 │                 │      │               ├─gnome-shell─┬─alarmclock───3*[{alarmclock}]
 │     │                 │                 │      │               │             ├─cairo-dock───3*[{cairo-dock}]
 │     │                 │                 │      │               │             └─6*[{gnome-shell}]
 │     │                 │                 │      │               ├─tracker-miner-f───3*[{tracker-miner-f}]
 │     │                 │                 │      │               ├─tracker-store───7*[{tracker-store}]
 │     │                 │                 │      │               ├─update-notifier───3*[{update-notifier}]
 │     │                 │                 │      │               ├─vino-server───2*[{vino-server}]
 │     │                 │                 │      │               ├─zeitgeist-datah───10*[{zeitgeist-datah}]
 │     │                 │                 │      │               └─3*[{gnome-session}]
 │     │                 │                 │      ├─gnome-settings-─┬─syndaemon
 │     │                 │                 │      │                 └─4*[{gnome-settings-}]
 │     │                 │                 │      ├─gnome-shell-cal───4*[{gnome-shell-cal}]
 │     │                 │                 │      ├─gnome-terminal-─┬─gnome-pty-helpe
 │     │                 │                 │      │                 ├─slogger
 │     │                 │                 │      │                 ├─3*[zsh]
 │     │                 │                 │      │                 ├─zsh───man───pager
 │     │                 │                 │      │                 ├─zsh───python3
 │     │                 │                 │      │                 ├─zsh───pstree
 │     │                 │                 │      │                 └─3*[{gnome-terminal-}]
...
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.