V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
liuguangxuan
V2EX  ›  Linux

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

  •  
  •   liuguangxuan · 29 天前 · 2733 次点击

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

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

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

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

    另外可以考虑用 ptrace 捕获 syscall,甚至 strace -p <pid> | post_processor 也是可以的。
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1570 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:02 · PVG 08:02 · LAX 17:02 · JFK 20:02
    ♥ Do have faith in what you're doing.