Чому деякі програми негайно повертаються до оболонки, а інші - до завершення?


13

Я читав з книги « Сучасні операційні системи», що коли команда виконується, оболонка створює дочірній процес, чекає, поки дитина не закінчить виконання, а потім чекає іншої команди від користувача. Це дійсно так для багатьох програм, як-от gedit. Термінал не приймає команди, поки я не закрився gedit. Однак коли я відкриваю редактор коду атома , оболонка повертається негайно, готова прийняти наступну команду навіть при запуску редактора. Закриття терміналу не закриває атом. Чи означає це, що редактор відкрився не як дочірній процес? Який основний механізм робить це можливим?

Біг ps au | grep atomдає

<username>      8042  0.0  0.0  15944  2264 pts/1    S+   00:55   0:00 grep --color=auto atom

1
Після запуску редактора атомів ви можете запустити ps au | grep atomтермінал і додати висновок до свого питання?
kirill-a

@ kirill-a Я оновив питання.
Асвін PJ

Відповіді:


18

Питання задає два типи програм:

  1. програми, які взаємодіють з користувачем в оболонці, і
  2. програми, які не взаємодіють з користувачем у оболонці.

У першому випадку програми, які взаємодіють з користувачем у оболонці, розроблені для запуску до завершення перед поверненням управління до оболонки. Нічого особливого не робиться.

Другий випадок складніший. Зазвичай програма розщедриться (зробивши копію себе в пам'яті) і організує видалення її зв'язку з керуючим терміналом оболонки , а також може виконати іншу програму, яка працює незалежно від оригінальної оболонки. Можливо, ви побачите повідомлення другої програми, але це, як правило, не взаємодіє з вами. Залежно від способу його використання ви можете мати

  • процес демона (сервера) або
  • програма може працювати у новому вікні. Графічні редактори роблять останнє.

Подальше читання:


Частина про розкручування та відключення від терміналу часто виконується за допомогою виклику функції daemonбібліотеки, яка виконує все це.
kasperd

Щоб уникнути отримання контрольного терміналу, використовується подвійна вилка
jfs

До обох коментарів: функція відсутня в POSIX, і я знаю, що керує терміналами, але відповідь тримала коротку та просту. Я використовував подвійну вилку з кінця 1980-х.
Томас Дікі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.