Я бы хотел сохранить свой проект как можно более простым, поэтому в идеале я бы использовал тот же двоичный файл, что и родительский процесс, и просто управлял бы дочерним процессом с помощью параметров командной строки.
fork
и exec
работают в Mac OS X так же, как в Linux и других средах POSIX, с одним уловом: в приложении Cocoa вы не можете просто fork
и не exec
, потому что Core Foundation не будетпозволяют использовать любые API на основе CF или Какао в новом процессе.Если вы fork
в приложении Какао, вы должны exec
в значительной степени сразу после этого.
Вы можете exec
тот же двоичный файл, используя свой собственный argv[0]
в [0]
argv
что вы передаете exec
.
Существует версия Какао fork
+ exec
: создайте NSTask и установите его собственный путь запуска [[[NSProcessInfo processInfo] arguments] objectAtIndex:0]
.По вышеуказанной причине невозможно fork
, а не exec
с NSTask.
Было бы также хорошо, если бы родитель мог получить дескрипторы stdin & stdout нового процесса, чтобыони могут взаимодействовать (хотя что-то, что я создаю с помощью pipe (), тоже будет работать).
pipe
также работает так, как вы ожидаете.
Если вы используете NSTask, версия Cocoaиз pipe
равно [NSPipe pipe]
.