Distributions
› Ubuntu
› Fedora
› CentOS
中文资源站
› 网易开源镜像站
liuguangxuan
V2EX  ›  Linux

在 Linux 上,在终端 A 中前台执行的进程,如何在终端 B 中掉到前台来执行?

  •  
  •   liuguangxuan · Sep 22, 2021 · 5125 views
    This topic created in 1869 days ago, the information mentioned may be changed or developed.

    假设我有一个可执行程序 a.out ,两个终端分别为终端 A 、终端 B 。

    现在我在终端 A 前台执行程序./a.out ,我如何不操作终端 A 、只操作终端 B,并且不结束 a.out 进程的情况下,让 a.out 在终端 B 中前台执行?

    21 replies  •  2021-09-24 10:31:55 +08:00
    FurN1
    FurN1
    Sep 22, 2021 via iPhone❤️1
    1
    tmux 了解一下
    hanxiV2EX
    hanxiV2EX
    Sep 22, 2021 via Android❤️1
    2
    只想到了 tmux,让 A 和 B 都在 tmux 里跑
    fullpowers
    fullpowers
    Sep 22, 2021❤️2
    3
    screen
    nanmu42
    nanmu42
    Sep 22, 2021 via iPhone❤️15
    4
    liuguangxuan
    liuguangxuan
    OP
    Sep 22, 2021
    5
    @IgniteWhite
    @hanxiV2EX
    @fullpowers 感谢三位老哥,tmux 只能事先跑在里面。我这个是已经执行的进程。

    @nanmu42 感谢大佬,这个正是我要找的。
    FurN1
    FurN1
    Sep 22, 2021 via iPhone
    6
    @nanmu42 cool
    leo2n
    leo2n
    Sep 22, 2021
    7
    @nanmu42 👍
    fox0001
    fox0001
    Sep 22, 2021
    8
    @nanmu42 #4 神奇!
    mingl0280
    mingl0280
    Sep 23, 2021
    9
    tail -f /proc/<pid>/1
    mingl0280
    mingl0280
    Sep 23, 2021❤️4
    10
    打错了
    tail -f /proc/<pid>/fd/1
    wangyu17455
    wangyu17455
    Sep 23, 2021
    11
    screen
    BrookO
    BrookO
    Sep 23, 2021
    12
    @nanmu42 还有这么神奇的东西!!!
    pythonee
    pythonee
    Sep 23, 2021
    13
    @nanmu42 神奇
    好奇这个主要用在什么地方呢?
    vhysug01
    vhysug01
    Sep 23, 2021
    14
    @mingl0280 感觉原理没错,但是没有输出呀,老哥
    2i2Re2PLMaDnghL
    2i2Re2PLMaDnghL
    Sep 23, 2021
    15
    @mingl0280 不行,你只能并入输出不能截取输出
    比如如果你 yes > /dev/null 的话,你会发现 /proc/<pid>/fd/1 是指向 /dev/null 的符号链接
    终端的话是指向 /dev/tty<n> 或 /dev/pts/<n> 的符号链接,你尝试打开并读取不会得到其他进程的输出。
    wangyzj
    wangyzj
    Sep 23, 2021
    16
    screen
    Loku
    Loku
    Sep 23, 2021
    17
    screen +1
    RobberPhex
    RobberPhex
    Sep 23, 2021
    18
    可以试一下 reptyr
    t123yh
    t123yh
    Sep 23, 2021 via Android
    19
    reptyr +1
    mingl0280
    mingl0280
    Sep 23, 2021 via Android
    20
    @2i2Re2PLMaDnghL 这个确实,没法整。
    2i2Re2PLMaDnghL
    2i2Re2PLMaDnghL
    Sep 24, 2021
    21
    @mingl0280 所以 #4 算是正解。
    粗看了一下代码,发现了 gdb 。也就是说如果有抗拒被 gdb 插入的程序,是不能覆盖的
    或者不是通过 stdout/stderr 而是重新把 pts/tty 打开的(虽然正常人不太会这么干),那也是不能覆盖的。

    另外可以考虑用 ptrace 捕获 syscall,甚至 strace -p <pid> | post_processor 也是可以的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2958 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 12:06 · PVG 20:06 · LAX 04:06 · JFK 07:06
    ♥ Do have faith in what you're doing.