ES2017 - Async vs. Yield

Да, оболочка должна fork выполнять каждый подпроцесс. Помните, что когда вы вызываете одно из семейств функций execve(), он заменяет текущий образ процесса с помощью exec'ed. Ваша оболочка не может продолжать обрабатывать дальнейшие команды, если она непосредственно выполняет подпроцесс, потому что после этого она больше не существует (кроме как подпроцесс).

Чтобы исправить это, просто fork() снова в ветви pid == 0 , и выполните команду ls в этом дочернем элементе. Помните wait() для обоих (всех) дочерних процессов, если вы не хотите, чтобы конвейер выполнялся асинхронно.

32
задан Felix Kling 24 August 2017 в 18:12
поделиться