Принимая во внимание информацию в вашем комментарии к OP, я предполагаю, что вы хотите вызвать system()
из нескольких потоков одновременно.
К сожалению, это не может работать, потому что когда вы вызываете system()
, вашПриложение ожидает сигнала, который отправляется, как только завершается дочерний процесс.Поскольку сигналы ничего не знают о потоках в вашем приложении, system()
не может быть запущен из нескольких потоков одновременно.
Спасибо, что JeremyP указал на направление NSTask в комментариях!
В качестве альтернативы можно использовать NSTask
.
NSTask
, использующий fork()
для создания дочернего процесса и вызывающий waitpid()
в родительском и execve()
(или одинего братьев и сестер) в дочернем процессе.Используя макросы, определенные в <sys/wait.h>
, возвращаемое значение дочернего элемента извлекается после его завершения.Таким образом, несколько дочерних процессов могут быть запущены без блокировки других потоков.Вы можете делать все это самостоятельно или просто использовать простой класс NSTask
.