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

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

  •  
  •   liuguangxuan · Sep 22, 2021 · 4673 views
    This topic created in 1703 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
        1
    FurN1  
       Sep 22, 2021 via iPhone   ❤️ 1
    tmux 了解一下
    hanxiV2EX
        2
    hanxiV2EX  
       Sep 22, 2021 via Android   ❤️ 1
    只想到了 tmux,让 A 和 B 都在 tmux 里跑
    fullpowers
        3
    fullpowers  
       Sep 22, 2021   ❤️ 2
    screen
    nanmu42
        4
    nanmu42  
       Sep 22, 2021 via iPhone   ❤️ 15
    liuguangxuan
        5
    liuguangxuan  
    OP
       Sep 22, 2021
    @IgniteWhite
    @hanxiV2EX
    @fullpowers 感谢三位老哥,tmux 只能事先跑在里面。我这个是已经执行的进程。

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

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