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

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

  •  
  •   liuguangxuan · 2021-09-22 19:51:03 +08:00 · 3956 次点击
    这是一个创建于 1156 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假设我有一个可执行程序 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  
       2021-09-22 19:52:42 +08:00 via iPhone   ❤️ 1
    tmux 了解一下
    hanxiV2EX
        2
    hanxiV2EX  
       2021-09-22 19:53:02 +08:00 via Android   ❤️ 1
    只想到了 tmux,让 A 和 B 都在 tmux 里跑
    fullpowers
        3
    fullpowers  
       2021-09-22 20:01:29 +08:00   ❤️ 2
    screen
    nanmu42
        4
    nanmu42  
       2021-09-22 20:15:38 +08:00 via iPhone   ❤️ 15
    liuguangxuan
        5
    liuguangxuan  
    OP
       2021-09-22 20:25:01 +08:00
    @IgniteWhite
    @hanxiV2EX
    @fullpowers 感谢三位老哥,tmux 只能事先跑在里面。我这个是已经执行的进程。

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

    另外可以考虑用 ptrace 捕获 syscall,甚至 strace -p <pid> | post_processor 也是可以的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   944 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:28 · PVG 05:28 · LAX 13:28 · JFK 16:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.