Конвеєри (Unix)
З Вікіпедії, безкоштовно encyclopedia
В Unix-подібних операційних системах конвеєр — це механізм міжпроцесної взаємодії, що використовує передачу повідомлень. Є набором поєднаних між собою процесів, які забезпечують передачу даних так, що стандартний вихідний потік кожного процесу (stdout) безпосередньо з'єднується зі стандартним вхідним потоком (stdin) наступного. Наступний процес починається, поки перший ще виконується і вони виконуються одночасно. Концепцію було запропоновано Дугласом Макілроєм в Bell Labs, колисці Unix, в процесі його розробки та формування філософії інструментизації[1][2]. Назву дано за аналогією зі справжніми конвеєрами. Ключовою функцією цих конвеєрів є «приховування нутрощів» (Ritchie & Thompson, 1974). Це забезпечує системі чистоту за простоту.
У цій статті йдеться про неіменовані канали, де дані, повернені одним процесом, буферизуються системою, поки не будуть зчитані наступним процесом і цей односпрямований канал зникає з закінченням процесів. Це відрізняється від іменованих каналів, де повідомлення передаються між процесами файлами, які залишаються по закінченні процесів. Стандартний shell-синтаксис для неіменованих каналів — це список декількох команд, розділених вертикальними рисками («пайпи» в розмовній лексиці користувачів Unix):
command1 | command2 | command3
Наприклад, щоб отримати список файлів в поточній директорії, зберегти лише стрічку ls виводу, що має рядок "key" (grep) і показати результат на сторінці, що прогортується (less), користувач може написати в командний рядок терміналу наступне:
ls -l | grep key | less
Командаls -l
виконується як процес, вивід (stdout) якого передається вводу (stdin) процесу команди grep key
, так само з командою less
. Кожен процес приймає ввід від попереднього і передає свій вивід наступному стандартними потоками. Кожен |
вказує командній оболонці під'єднати стандартний вивід команди зліва до стандартного вводу команди справа через механізм взаємодії між процесами, що називають неіменованим каналом, вбудованим в операційну систему. Канали є односторонніми: дані переходять каналом лише зліва направо.