...или о fork() в двух словах.
Как люди решают задачи
Обычно у каждой задачи есть одно простое решение, которое воспринимается всеми как правильное. Люди воспринимают такое решение правильным либо исходя из личного опыта¹; исходя из опыта других людей² или просто не задумываясь о правильности³. И самое удивительное, что мир не взорвался, никто (массово) от этого не умер, код работает и приносит деньги.
¹ "всегда так пишу код, никто не умер"
² "копирую код из stack overflow который набрал больше всех плюсов"
³ "копирую первый попавшийся код из stack overflow"
Однако самый простой - не всегда самый правильный. Да, можно скопировать самый заплюсованный ответ и сказать, что миллионы не могут ошибаться, но ведь миллионы людей делают прививки и миллионы людей не делают прививки и одна из групп, исходя из простейшей логики, совершила ошибку.
Однако мы отвлеклись. Поставим перед собой задачу:
Нам необходимо наиболее правильным способом запустить из своего кода другую программу.
Не так важно, зачем. Это может быть запуск игры из лаунчера, запуск утилиты ping чтобы не реализовывать отправку ICMP-пакетов самостоятельно, запуск программы по клику на ярлык, миллион вариантов, думаю, что вы сами хотя бы раз в жизни сталкивались с такой задачей.
Содержание статьи
* Как кушать пингвина вилкой?
Общие знания о запуске процессов под LINUX-системами
* Как кушать корову если есть вилка?
Copy-on-write, что это и зачем? vfork и почему он не лучше
* Как кушать икру?
posix_spawn и почему он не замещает fork()
* Как кушают клоны?
clone() под капотом у fork()
* Почему когда ешь суп вилкой он утекает?
Утечка дескрипторов после fork() и как этого избежать
* Почему у вилки три зуба?
Важность обработки всех вариантов возврата fork()
* Как кушать демонов вилкой?
Запуск демонизирующихся процессов при помощи fork()
* Как наложить вилкой в другую тарелку?
Переназначение дескрипторов вывода для нового процесса
* Как сигналить вилке?
Взаимоотношения обработки сигналов и fork()
* Как пользоваться вилкой когда сломалась ручка?
Самоликвидация дочернего процесса после завершения материнского
* Как подготовиться к использованию вилки?
Сценарии использования pthread_atfork()
* Как поцарапать окно вилкой?
Запуск дочернего процесса под Windows-системой
* Как систематически пользоваться вилкой?
Почему вам не стоит пользоваться system()
* Заключение
Благодарности и выводы