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

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

  •  
  •   liuguangxuan · 70 天前 · 2855 次点击
    这是一个创建于 70 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假设我有一个可执行程序 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   70 天前 via iPhone   ❤️ 1
    tmux 了解一下
    hanxiV2EX
        2
    hanxiV2EX   70 天前 via Android   ❤️ 1
    只想到了 tmux,让 A 和 B 都在 tmux 里跑
    fullpowers
        3
    fullpowers   70 天前   ❤️ 2
    screen
    nanmu42
        4
    nanmu42   70 天前 via iPhone   ❤️ 15
    liuguangxuan
        5
    liuguangxuan   70 天前
    @IgniteWhite
    @hanxiV2EX
    @fullpowers 感谢三位老哥,tmux 只能事先跑在里面。我这个是已经执行的进程。

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

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