Труба и вилка в Unix |? - PullRequest
       7

Труба и вилка в Unix |?

0 голосов
/ 26 июня 2018

Я читал что за труба в операционной системе и есть кое-что, чего я не понимаю.

Возьмите последовательность команд Unix, разделенных символьной линией, например

cat file | grep "something"

что происходит при обработке трубы |? Я понимаю, что канал unix открывается с помощью функции pipe(), но я не понимаю, как "вилка" могла бы происходить здесь в любом из задействованных процессов.

Что происходит и как включается вилка (если есть)?

1 Ответ

0 голосов
/ 26 июня 2018

В вашем случае фактически выполняется два fork вызова: один для команды cat и один для команды grep.

Требуются fork вызовы, потому что единственный стандартный способ выполнения программ в POSIX - это использование семейства вызовов exec, и эти заменяют образ текущего процесса изображением из загруженного программа. И если оболочка не fork создает новый процесс для каждой выполняемой команды, первый запуск программы заменит оболочку, и оболочка больше не будет существовать.

Канал настроен так, что конец записи канала будет подключен к стандартному выходу первого дочернего процесса (команда cat), а конец чтения канала будет подключен к стандартному входу. второго дочернего процесса (команда grep).

Все это происходит за кулисами в оболочке.

...