Ну, в Linux есть эквивалентные вызовы для вашей цели, но они работают немного по-другому, по крайней мере, для механизма процессов.
Для потоков вы можете использовать pthread_create
. Он работает очень похоже на CreateThread
, за исключением того, что некоторые параметры отличаются. Должно быть очень простым в использовании. Вот хороший учебник: https://computing.llnl.gov/tutorials/pthreads/
Эмуляция CreateProcess
для запуска внешнего процесса не так проста. Вам понадобится знаменитая комбо fork/exec
. Во-первых, вам нужно вызвать fork
внутри основного процесса, чтобы вызвать дочерний процесс. Этот дочерний элемент создается путем дублирования начального процесса. Затем вы можете управлять потоком, проверяя значение, возвращаемое fork
:
int rv = fork();
// new process was spawned here. The following code is executed
// by both processes.
if(rv == 0)
{
// we are in the child process
}
else
{
// we are in the parent
}
В основном rv
будет 0 для ребенка и pid ребенка для родителя. Я надеюсь, что я не потерял тебя до сих пор. :)
Для продолжения вам потребуется вызов одной из функций семейства exec
, чтобы запустить внешний процесс:
int rv = fork();
// new process was spawned here. The following code is executed
// by both processes.
if(rv == 0)
{
execl("/bin/ls", "ls", NULL); // start the ls process
}
else
{
// we are in the parent
}
В приведенном выше примере я запускаю внешний процесс /bin/ls
, который печатает содержимое текущей папки.
Вот простой пример: http://flinflon.brandonu.ca/dueck/2001/62306/Processes/Unix%20Examples.htm
Теперь вы можете задаться вопросом, зачем вам сначала звонить fork
и почему execl
недостаточно. Это связано с тем, что после завершения программы, вызванной execl
, текущий процесс также прекращается, и вы не хотите, чтобы это происходило в основном процессе.