【问题标题】:How to run process which only attach stdin, stdout and stderr to another running process如何运行仅将标准输入、标准输出和标准错误附加到另一个正在运行的进程的进程
【发布时间】:2021-03-03 08:19:30
【问题描述】:

我有一个生成子进程并使用 stdin/stdout/stderr 与之通信的应用程序。我可以修改生成命令。

我想要实现的是在从应用程序生成之前手动运行这个子进程(例如,因为我想在调试器中运行)并使用标准生成附加到它。

有可能吗? 我知道有 /proc/PID/fd/0 等等。但我仍然不知道是否可以通过生成另一个“模拟进程”来连接它。

【问题讨论】:

  • 实际上不可能更改现有进程的 I/O 连接。
  • 有可能,我可以控制这两个进程(意味着我可以实现任何东西),但我希望我可以使用当前界面不费吹灰之力地做到这一点。 (这是应用程序生成子进程并使用标准输入/标准输出进行通信)
  • 正常机制是fork,redirect I/O,exec。执行后,您无法从进程外部更改 I/O 连接。
  • 似乎最简单的方法忘记附加到标准输入/标准输出,退一步添加实现选项以通过套接字进行通信,而不是产生一个新进程。
  • 如果您可以更改子进程的代码,您还有更多选择。我假设你需要一些更通用的东西。

标签: linux process pipe stdin


【解决方案1】:

作为调试器附加到子进程。为 stdin、stdout 和 stderr 创建新管道,并使用dup2 将它们放置到位。如果您使用的是 Linux 5.6 或更高版本,请使用 pidfd_getfd 将这些管道的另一端连接到您的其他进程中。否则,通过 Unix 域套接字将它们作为 SCM_RIGHTS 辅助数据发送到您的其他进程。

【讨论】:

    猜你喜欢
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 2013-06-25
    • 1970-01-01
    相关资源
    最近更新 更多