我有来自exec()
或system()
或popen()
的来电者生成的消息,并希望将其传递给子流程。更改env是一种方法,但在多线程程序中,更改putenv()
或setenv()
的env并不安全。我不允许通过子进程的argv
传递它。
将某些内容写入某个文件是一种选择,但我们如何识别哪一个特定的消息从哪个父项传递到哪个子项?一种方法是将父pid附加到消息中,并且子项可以找到具有ppid匹配的消息。但是当多个线程调用popen()
时,会有几条带有相同pid的消息。
答案 0 :(得分:0)
我不是专家,但这是一个想法:
Shell允许您使用“临时”环境变量。例如,您可以(在zsh中):
% MSG="Hello" my_prog
% echo $MSG
%
也许你可以做这样的事情?也许这会涉及在子shell中运行你的命令?
答案 1 :(得分:0)
popen()可能是你的朋友。我建议使用锁定来防止多个线程立即写下管道,并用线程ID信息标记你的消息。