Выполнить другую программу в многопоточной программе - PullRequest
1 голос
/ 20 мая 2010

Просто интересно, как можно выполнить другую программу в потоке и отправить / получить информацию из нее. По сути та же концепция, что и с дочерним процессом и использованием каналов для связи, однако я не хочу использовать fork.

Я не могу найти, возможно ли это сделать, любая помощь будет оценена.

Спасибо

Ответы [ 2 ]

2 голосов
/ 20 мая 2010

Вы не можете использовать семейство функций exec для загрузки другого исполняемого файла в потоке; exec функции заменяют весь процесс процессом, запущенным из исполняемого файла. Таким образом, fork() необходим, если вы хотите, чтобы ваш исходный процесс продолжал выполняться.

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

0 голосов
/ 20 мая 2010

Если вы не используете fork (прямо или косвенно), то это не совсем другой процесс. Конечно, вы можете общаться между потоками внутри процесса. Это важно для большинства многопоточности.

...