26

Sometime I need to run an application from terminal for debugging. If I am sure the bug will occur short after launching the application, I can run this application from the Terminal.

However, bugs occur unexpectedly, and then only I need to monitor the buggy application from the Terminal (to see its output).

Can I then pick up an application from terminal, which was not launched using Terminal? If so how?

neydroydrec
  • 4,780

4 Answers4

30

Each process in linux has a special directory /proc/{pid}/fd/. 0 is stdin, 1 is stdout and 2 is stderr. So, assuming you are only interested in diagnostic output you can determine the process pid, and then in the terminal do:

to see stdout:

cat /proc/{pid of process}/fd/1

to see stderr:

cat /proc/{pid of process}/fd/2
Cros
  • 103
9

Or you can use strace like this

sudo strace -p $pid_of_the_process
arrange
  • 15,219
6

You can attach with gdb to a running process.

The syntax is

gdb program pid

Ok, you cannot see source code, if debug information are stripped, which is the default for deployed applications. But you can probably see stdout/stderr and debugger messages, segfaults.

enzotib
  • 96,093
5

You are likely looking for retty. You could also look for "attach tty". Basically it's done using ptrace so you could even roll your own.

nc3b
  • 151