@Laziness_Itself а еще наша лекция будет неполной, если не сказать, что в ядре никаких вызовов "запусти мне вон ту программу" нет. Есть группа exec* (всякие execve например,
go figure), которые заменяют выполняющуюся программу на нужную тебе. Поэтому, чтобы запустить внутри баша греп, ты
1. форкаешься
2. У тебя есть два баша на одном и том же месте выполнения программы, сразу после форка. Чтобы понять, ты родитель или дитя, ты смотришь возврат форка. Родитель получит пид ребенка, ребенок - 0 (ЕМНИП).
3. Процесс-ребенок выполнит ^^^ вуду с fd, потом сделает exec и превратится в ту программу, которую ты хочешь запустить. Например, в греп.