2012-03-01 3 views
1

У меня есть сообщение, генерируемое вызывающим абонентом exec() или system() или popen(), и вы хотите передать его дочернему процессу. Изменить env - один из способов, но в многопоточной программе изменение env на putenv() или setenv() небезопасно. Мне не разрешено передавать его argv дочернего процесса.Передача информации для системы() в многопоточной программе

Написание чего-то в каком-либо файле является одним из вариантов, но как мы можем определить, какое конкретное сообщение передается от какого родителя и предназначено для какого ребенка? Один из способов - добавить родительский pid к сообщению, и ребенок может найти сообщение с ppid-сопоставлением. Но когда несколько потоков вызовут popen(), будет несколько сообщений с одним и тем же pid.

+0

На каком языке вы владеете? Думаю, C? Ответ зависит от языка: например, у Python есть параметр 'env' для' popen() '... – EOL

+0

Да, я использую C.thx – user1200759

ответ

0

Я не специалист, но вот идея:

Корпуса позволяют использовать «временные» переменные среды. Например, вы можете сделать (в zsh):

% MSG="Hello" my_prog 
% echo $MSG 

% 

Возможно, вы могли бы сделать что-то вроде этого? возможно, это приведет к запуску вашей команды в под-оболочке?

0

popen() возможно, ваш друг здесь. Я бы предложил использовать блокировку для предотвращения одновременного записи нескольких потоков и теги сообщений с информацией о потоке.

Смежные вопросы