Attach to a processes output for viewing

前端 未结 7 846
北荒
北荒 2020-12-12 08:26

How would I \'attach\' a console/terminal-view to an applications output so I can see what it may be saying?

How would I detach from an applications output without k

相关标签:
7条回答
  • 2020-12-12 09:07

    How would I 'attach' a console/terminal-view to an applications output so I can see what it may be saying?

    About this question, I know it is possible to catch the output, even when you didn't launch sceen command before launching the processus.

    While I never tried it, I've found an interesting article which explains how to do using GDB (and without restarting your process).

    redirecting-output-from-a-running-process

    Basically:

    1. Check the open files list for your process, thanks to /proc/xxx/fd
    2. Attach your process with GDB
    3. While it is paused, close the file you are interested in, calling close() function (you can any function of your process in GDB. I suspect you need debug symbols in your process..)
    4. Open the a new file calling the create() or open() function. (Have a look in comments at the end, you'll see people suggest to use dup2() to ensure the same handle will be in use)
    5. Detach the process and let in run.

    By the way, if you are running a linux OS on i386 box, comments are talking about a better tool to redirect output to a new console : 'retty' . If so, consider its use.

    0 讨论(0)
  • 2020-12-12 09:10

    I wanted to remotely watch a yum upgrade process that had been run locally, so while there were probably more efficient ways to do this, here's what I did:

    watch cat /dev/vcsa1
    

    Obviously you'd want to use vcsa2, vcsa3, etc., depending on which terminal was being used.

    So long as my terminal window was of the same width as the terminal that the command was being run on, I could see a snapshot of their current output every two seconds. The other commands recommended elsewhere did not work particularly well for my situation, but that one did the trick.

    0 讨论(0)
  • 2020-12-12 09:11

    For me, this worked:

    1. Login as the owner of the process (even root is denied permission)

      ~$ su - process_owner
      
    2. Tail the file descriptor as mentioned in many other answers.

      ~$ tail -f /proc/<process-id>/fd/1 # (0: stdin, 1: stdout, 2: stderr)
      
    0 讨论(0)
  • 2020-12-12 09:14

    I was looking for this exact same thing and found that you can do:

    strace -ewrite -p $PID
    

    It's not exactly what you needed, but it's quite close.

    I tried the redirecting output, but that didn't work for me. Maybe because the process was writing to a socket, I don't know.

    0 讨论(0)
  • 2020-12-12 09:16

    You can use reptyr:

    sudo apt install reptyr
    reptyr pid
    
    0 讨论(0)
  • 2020-12-12 09:25

    There are a few options here. One is to redirect the output of the command to a file, and then use 'tail' to view new lines that are added to that file in real time.

    Another option is to launch your program inside of 'screen', which is a sort-of text-based Terminal application. Screen sessions can be attached and detached, but are nominally meant only to be used by the same user, so if you want to share them between users, it's a big pain in the ass.

    0 讨论(0)
提交回复
热议问题