使用GDB将正在运行的进程STDOUT/STDERR重定向到SSH STDOUT



我有一个进程在嵌入式系统(linux)上运行。其STDOUT/STDERR是位于串行端口上的控制台。

我想将它的输出(标准和错误)重定向到SSH会话的输出。我已经读到您可以使用GDB执行类似的操作,但我不知道如何重定向到SSH会话的STDOUT/STDERR,而不是重定向到文件。

由于磁盘资源不足,我无法对文件执行此操作。我也看到了一些使用命名管道的例子,但我没有mkfifo命令。我确实有GDB。

此外,假设这是可能的,当我关闭SSH会话时,进程会终止吗?如果是,我可以在重定向之前重定向回来吗?

谢谢。

只要可以从gdb调用libc函数,就可以执行此操作。

#ssh root@embedded

查询后台程序输出位置:

# ls -l /proc/`pidof daemon`/fd/1
/proc/13202/fd/1 -> /dev/null

它不能为null,它可以指向其他控制台,甚至指向某个管道或文件,将此位置存储在某个地方。查询ssh会话输出位置:

# ls /proc/self/fd/1 -l
lrwx------ 1 root root 64 дек.  15 16:51 /proc/self/fd/1 -> /dev/pts/9

或者,如果你有,只需拨打tty

现在开始工作:

# gdb -p `pidof daemon`
..
81      ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) call open("/dev/pts/9",2,0)
$1 = 0x3
(gdb) call dup2(3,2)
$2 = 0x2
(gdb) call dup2(3,1)
$3 = 0x1
(gdb) quit
Detaching from program: /root/daemon, process 13202
 daemon output/errorput

在退出ssh会话之前重复相同的步骤,只需将/dev/pts/9替换为open系统调用中的初始输出位置。

最新更新