Работают ли вне процесса в приложении какао? - PullRequest
1 голос
/ 01 октября 2010

У меня есть приложение-какао, которое должно выполнить некоторую работу во втором процессе (потому что оно может зависнуть из-за глючных библиотек).Мне бы хотелось, чтобы мой проект был как можно более простым, поэтому в идеале я бы использовал тот же двоичный файл, что и родительский процесс, и просто управлял бы дочерним процессом с помощью параметров командной строки.Также было бы неплохо, если бы родитель мог получить дескрипторы к stdin & stdout нового процесса, чтобы они могли общаться (хотя кое-что, что я создаю с pipe (), тоже будет работать).Кто-нибудь решил эту проблему раньше?Что ты узнал?Я пришел из Win32 / Linux, поэтому я не уверен, есть ли какие-то специальные возможности, которые я получаю с Cocoa / OS X, которые я должен использовать.

1 Ответ

3 голосов
/ 01 октября 2010

Я бы хотел сохранить свой проект как можно более простым, поэтому в идеале я бы использовал тот же двоичный файл, что и родительский процесс, и просто управлял бы дочерним процессом с помощью параметров командной строки.

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].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...