Attach to running processes

strace can attach and trace running processes. Check following simple example:

# cat dead_loop.c
#include <unistd.h>

int main(void)
{
        while (1)
        {
                sleep(1);
        }
        return 0;
}

Build and launch two processes:

# gcc dead_loop.c -o dead_loop
# ./dead_loop &
[1] 2194
# ./dead_loop &
[2] 2195

Use -p option to trace one process:

# strace -p 2194
strace: Process 2194 attached
restart_syscall(<... resuming interrupted nanosleep ...>) = 0
nanosleep({tv_sec=1, tv_nsec=0}, 0x7ffc037bf730) = 0
......

Use -p option to trace multiple processes:

# strace -p 2194,2195
strace: Process 2194 attached
strace: Process 2195 attached
[pid  2194] restart_syscall(<... resuming interrupted nanosleep ...> <unfinished ...>
[pid  2195] restart_syscall(<... resuming interrupted nanosleep ...> <unfinished ...>
[pid  2194] <... restart_syscall resumed> ) = 0
[pid  2194] nanosleep({tv_sec=1, tv_nsec=0},  <unfinished ...>
[pid  2195] <... restart_syscall resumed> ) = 0
......

strace can also utilize pidof command to trace processes:

# strace -p "`pidof dead_loop`"
strace: Process 2195 attached
strace: Process 2194 attached
[pid  2194] restart_syscall(<... resuming interrupted nanosleep ...> <unfinished ...>
[pid  2195] restart_syscall(<... resuming interrupted nanosleep ...>) = 0
[pid  2195] nanosleep({tv_sec=1, tv_nsec=0},  <unfinished ...>
[pid  2194] <... restart_syscall resumed> ) = 0
......

Or use pgrep:

# strace -p "`pgrep dead_loop`"
strace: Process 2194 attached
strace: Process 2195 attached
[pid  2195] restart_syscall(<... resuming interrupted nanosleep ...> <unfinished ...>
[pid  2194] restart_syscall(<... resuming interrupted nanosleep ...>) = 0
[pid  2194] nanosleep({tv_sec=1, tv_nsec=0},  <unfinished ...>
[pid  2195] <... restart_syscall resumed> ) = 0
[pid  2195] nanosleep({tv_sec=1, tv_nsec=0},  <unfinished ...>
......

results matching ""

    No results matching ""