Ну да, это и есть потоки, за исключением части "два разных main () / application".
На самом деле причина clone(2)
заключается в том, чтобы реализовывать потоки.
Clone (2) более или менее требует, чтобы вы объявили отдельный стек (если вы его не создадите), потому что без него ребенок не сможет вернуться с текущего уровня вызова, не уничтожив стек родителей.
Как только вы начнете настраивать стеки для каждого процесса, вы также можете просто использовать библиотеку потоков posix.
Что касается части, в которую загружаются два разных приложения, то вызов execve(2)
, скорее всего, не будет способом сделать это. В наши дни ядро точно не запускает программы. Более типично, что образ настроен для запуска динамического загрузчика Elf, и это все, что на самом деле работает ядро. Затем загрузчик mmaps(2)
помещает процесс и его библиотеки в адресное пространство. Конечно, это можно сделать, чтобы получить «два разных приложения», и планировщик потока будет рад запустить их как два процесса через clone (2).