【问题标题】:Passing information down for system() in multi-thread program在多线程程序中为 system() 传递信息
【发布时间】:2012-03-01 02:14:56
【问题描述】:

我有一条由exec()system()popen() 的调用者生成的消息,并希望将其传递给子进程。更改 env 是一种方法,但在多线程程序中,通过 putenv()setenv() 更改 env 是不安全的。子进程的argv不允许我通过。

将某些内容写入某个文件是一种选择,但是我们如何确定一条特定消息是从哪个父级传递并打算发送给哪个子级的呢?一种方法是将父 pid 附加到消息中,子进程可以找到与 ppid 匹配的消息。但是当多个线程调用popen()时,会出现多条具有相同pid的消息。

【问题讨论】:

  • 您使用什么语言?我猜是C?答案取决于语言:例如,Python 有一个 env 参数到 popen()...

标签: c multithreading thread-safety popen


【解决方案1】:

我不是专家,但这里有一个想法:

Shell 允许您使用“临时”环境变量。例如,您可以(在 zsh 中):

% MSG="Hello" my_prog
% echo $MSG

%

也许你可以做这样的事情?也许这会涉及在子 shell 中运行您的命令?

【讨论】:

    【解决方案2】:

    popen() 可能是你的朋友。我建议使用锁定来防止多个线程同时写下管道,并使用线程 ID 信息标记您的消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-02
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      • 2023-03-09
      • 2019-01-26
      • 2012-11-24
      相关资源
      最近更新 更多