Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何运行只将stdin、stdout和stderr附加到另一个正在运行的进程的进程_Linux_Process_Pipe_Stdin - Fatal编程技术网

Linux 如何运行只将stdin、stdout和stderr附加到另一个正在运行的进程的进程

Linux 如何运行只将stdin、stdout和stderr附加到另一个正在运行的进程的进程,linux,process,pipe,stdin,Linux,Process,Pipe,Stdin,我有一个生成子进程的应用程序,它使用stdin/stdout/stderr与之通信。我可以修改spawn命令 我想要实现的是在从应用程序生成之前手动运行这个子进程(例如,因为我想在调试器中运行),并使用标准生成附加到它 可能吗? 我知道有/proc/PID/fd/0等等。但是我仍然不知道是否可以通过生成另一个“模拟进程”来连接它。作为调试器附加到子进程。为stdin、stdout和stderr创建新管道,并使用dup2将它们放置到位。如果您使用的是Linux 5.6或更高版本,请使用pidfd_

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

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

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

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

实际上不可能更改现有进程的I/O连接。有可能,我可以控制这两个进程(意味着我可以实现任何东西)但我希望使用当前的界面,我可以不用任何额外的努力就可以做到这一点。(这是应用程序生成子流程和使用stdin/stdout的通信)正常的机制是fork、redirect I/O、exec。执行后,您无法从进程外部更改I/O连接。似乎最简单的方法是忘记连接到stdin/stdout,使“后退”添加“实现”选项通过套接字进行通信,而不是生成新进程。如果您可以更改子进程的代码,则有更多选项。我以为你需要更有效的东西。