Re: Can stdout/stderr of a running process be dynamically redirected in FreeBSD ?

From: Konstantin Belousov <kostikbel_at_gmail.com>
Date: Sun, 09 Jun 2024 19:45:55 UTC
On Sun, Jun 09, 2024 at 12:35:25PM -0600, Warner Losh wrote:
> On Sun, Jun 9, 2024, 12:28 PM Yuri <yuri@freebsd.org> wrote:
> 
> > Imagine the situation when there is a process that is running in the
> > terminal and periodically printing something related to its progress.
> >
> > At some point this terminal output should be replaced by a TUI in the same
> > terminal that would capture the original process' output and show it in its
> > TUI sub-window, and would also show some other info.
> >
> >
> > There is the project for Linux called "redirect" that does such
> > stdout/stderr redirection: https://github.com/jerome-pouiller/reredirect/
> >
> > However, it uses ptrace functions that are missing in FreeBSD, like
> > PTRACE_POKEUSER.
> >
> >
> > Is it possible to perform the action like is described in the first
> > paragraph in some other way, given that ptrace doesn't have required
> > functions?
> >
> >
> > This function is useful in many business contexts, when users run some
> > long-running tools, and there is a variety of ways how results of these
> > tools can be displayed to the user.
> >
> 
> Look at the snp device and watch. They are close if a tty is involved.

snp watches, it does not redirect.

I suspect that an example almost identical by its main idea is reptyr.
AFAIR the program does the same hacking on the target process, by attaching
to it, and injecting the code to execute.  See ports sysutils/reptyr,
I believe that the FreeBSD port was done by kevans.