Linux Debugging 6 - Process Tracing

1. how to inject my lib to the process?

有2个环境变量,LD_LIBRARY_PATH和LD_PRELOAD

/home/a/j/nomad2:cat hook.c #include <stdio.h> void _init(void) { printf(">> hook /n"); } void _fini(void) { printf("<< hook /n"); } /home/a/j/nomad2:cc hook.c -o libhook.o -c -fPIC /home/a/j/nomad2:ld -shared -o libhook.so -soname libhook.so.1 -lc libhook.o /home/a/j/nomad2:export LD_PRELOAD=/home/a/j/nomad2/c/libhook.so /home/a/j/nomad2:ls >> hook 3 asm.c c.c d.c hello.c hg3 int.c memset.c pass static.c a.c b.c c.o e hg0 hook.c ip memset.s passwd.c static.s a.out b.out collatz.c e.c hg1 htmlfilter.c libhook.o of.c s test.c after_ci.c bit_order.c cr.c f.c hg2 input.txt libhook.so output.txt s.c /home/a/j/nomad2:./a.out >> hook hello world! << hook

配置文件

/home/a/j/nomad2:ls /etc/ld* /etc/ld.so.cache /etc/ld.so.conf /etc/ldap.conf /etc/ldap.secret /etc/ld.so.conf.d: libc.conf x86_64-linux-gnu x86_64-linux-gnu.conf /etc/ldap: ldap.conf

加上mtrace后,奇迹发生了

/home/a/j/nomad2:cat hook.c #include <stdio.h> #include <mcheck.h> void _init(void) { mtrace(); } void _fini(void) { muntrace(); }

编写脚本trace.sh

/home/a/j/nomad2:cat trace.sh export MALLOC_TRACE=/tmp/trace.nomad2 $1 unset MALLOC_TRACE

测试程序

/home/a/j/nomad2:cat malloc.c #include <stdio.h> int main() { char *c, *d, *e, *f, *g, *h; c = malloc(100); d = malloc(100); e = malloc(100); f = malloc(100); g = malloc(100); h = malloc(100); free(c); free(d); }

执行分析

/home/a/j/nomad2:./trace.sh ./a.out /home/a/j/nomad2:cat /tmp/trace.nomad2 = Start @ ./a.out:[0x4004fa] + 0x601460 0x64 @ ./a.out:[0x400508] + 0x6014d0 0x64 @ ./a.out:[0x400516] + 0x601540 0x64 @ ./a.out:[0x400524] + 0x6015b0 0x64 @ ./a.out:[0x400532] + 0x601620 0x64 @ ./a.out:[0x400540] + 0x601690 0x64 @ ./a.out:[0x400552] - 0x601460 @ ./a.out:[0x400560] - 0x6014d0 = End

2. strace

strace : trace system calls and signals

例如,在一个窗口中strace到另外一个终端,并且在被trace的终端中按下“hello”

/home/a/j/nomad2:strace -p 16925 Process 16925 attached - interrupt to quit read(0, "h", 1) = 1 write(2, "h", 1) = 1 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 read(0, "e", 1) = 1 write(2, "e", 1) = 1 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 read(0, "l", 1) = 1 write(2, "l", 1) = 1 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 read(0, "l", 1) = 1 write(2, "l", 1) = 1 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 read(0, "o", 1) = 1 write(2, "o", 1) = 1 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 read(0,

下面的例子展示了如何trace进程以及线程

1) 进程

在一个窗口输入ifconfig,并在另一个窗口进行strace。

/home/a/j/nomad2:strace -o /tmp/strace.nomad2 -f -p 16925 Process 16925 attached - interrupt to quit Process 18335 attached (waiting for parent) Process 18335 resumed (parent 16925 ready) Process 16925 suspended Process 16925 resumed Process 18335 detached

产生的log文件内容, 第一列为进程号

/home/a/j/nomad2:cat /tmp/strace.nomad2 16925 wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WSTOPPED|WCONTINUED, NULL) = 18129 16925 rt_sigprocmask(SIG_BLOCK, [CHLD TSTP TTIN TTOU], [CHLD], 8) = 0 16925 ioctl(255, TIOCSPGRP, [16925]) = 0 16925 rt_sigprocmask(SIG_SETMASK, [CHLD], NULL, 8) = 0 16925 ioctl(255, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 16925 ioctl(255, TIOCGWINSZ, {ws_row=31, ws_col=114, ws_xpixel=0, ws_ypixel=0}) = 0 16925 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 16925 --- SIGCHLD (Child exited) @ 0 (0) --- 16925 wait4(-1, 0x7fffc0628744, WNOHANG|WSTOPPED|WCONTINUED, NULL) = -1 ECHILD (No child processes) 16925 rt_sigreturn(0x8) = 0 16925 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 16925 rt_sigaction(SIGINT, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 stat("/var/mail/nomad2", 0x7fffc0627c10) = -1 ENOENT (No such file or directory) 16925 rt_sigprocmask(SIG_BLOCK, [CHLD TSTP TTIN TTOU], [], 8) = 0 16925 ioctl(255, TIOCSPGRP, [16925]) = 0 16925 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 16925 rt_sigaction(SIGINT, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0 16925 ioctl(0, TIOCGWINSZ, {ws_row=31, ws_col=114, ws_xpixel=0, ws_ypixel=0}) = 0 16925 ioctl(0, TIOCSWINSZ, {ws_row=31, ws_col=114, ws_xpixel=0, ws_ypixel=0}) = 0 16925 ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 16925 ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 16925 ioctl(0, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig -icanon -echo ...}) = 0 16925 ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig -icanon -echo ...}) = 0 16925 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 16925 rt_sigprocmask(SIG_BLOCK, [INT QUIT ALRM TSTP TTIN TTOU], [], 8) = 0 16925 rt_sigaction(SIGINT, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGTERM, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGTERM, {SIG_IGN}, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGQUIT, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGQUIT, {SIG_IGN}, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGALRM, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {0x44c5b0, [HUP INT ILL TRAP ABRT BUS FPE USR1 SEGV USR2 PIPE ALRM TERM XCPU XFSZ VTALRM SYS], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGTSTP, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGTSTP, {SIG_IGN}, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGTTOU, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGTTOU, {SIG_IGN}, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGTTIN, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGTTIN, {SIG_IGN}, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 16925 rt_sigaction(SIGWINCH, {0x481920, [], SA_RESTORER|SA_RESTART, 0x7fccb7c9e100}, {0x44c430, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 write(2, "nomad2@ubuntu:/proc/16925/fd$ ", 30) = 30 16925 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 16925 read(0, "i", 1) = 1 16925 write(2, "i", 1) = 1 16925 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 16925 read(0, "f", 1) = 1 16925 write(2, "f", 1) = 1 16925 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 16925 read(0, "c", 1) = 1 16925 write(2, "c", 1) = 1 16925 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 16925 read(0, "o", 1) = 1 16925 write(2, "o", 1) = 1 16925 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 16925 read(0, "n", 1) = 1 16925 write(2, "n", 1) = 1 16925 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 16925 read(0, "f", 1) = 1 16925 write(2, "f", 1) = 1 16925 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 16925 read(0, "i", 1) = 1 16925 write(2, "i", 1) = 1 16925 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 16925 read(0, "g", 1) = 1 16925 write(2, "g", 1) = 1 16925 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 16925 read(0, "/r", 1) = 1 16925 write(2, "/n", 1) = 1 16925 rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0 16925 ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig -icanon -echo ...}) = 0 16925 ioctl(0, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig icanon echo ...}) = 0 16925 ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 16925 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 16925 rt_sigaction(SIGINT, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGTERM, {SIG_IGN}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGQUIT, {SIG_IGN}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGALRM, {0x44c5b0, [HUP INT ILL TRAP ABRT BUS FPE USR1 SEGV USR2 PIPE ALRM TERM XCPU XFSZ VTALRM SYS], SA_RESTORER, 0x7fccb7c9e100}, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGTSTP, {SIG_IGN}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGTTOU, {SIG_IGN}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGTTIN, {SIG_IGN}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGWINCH, {0x44c430, [], SA_RESTORER, 0x7fccb7c9e100}, {0x481920, [], SA_RESTORER|SA_RESTART, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGINT, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 stat(".", {st_mode=S_IFDIR|0500, st_size=0, ...}) = 0 16925 stat("/opt/frame5.5/bin/ifconfig", 0x7fffc0628880) = -1 ENOENT (No such file or directory) 16925 stat("/usr/local/sbin/ifconfig", 0x7fffc0628880) = -1 ENOENT (No such file or directory) 16925 stat("/usr/local/bin/ifconfig", 0x7fffc0628880) = -1 ENOENT (No such file or directory) 16925 stat("/usr/sbin/ifconfig", 0x7fffc0628880) = -1 ENOENT (No such file or directory) 16925 stat("/usr/bin/ifconfig", 0x7fffc0628880) = -1 ENOENT (No such file or directory) 16925 stat("/sbin/ifconfig", {st_mode=S_IFREG|0755, st_size=69104, ...}) = 0 16925 stat("/sbin/ifconfig", {st_mode=S_IFREG|0755, st_size=69104, ...}) = 0 16925 rt_sigprocmask(SIG_BLOCK, [INT CHLD], [], 8) = 0 16925 pipe([3, 4]) = 0 16925 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fccb861a770) = 18335 18335 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 18335 rt_sigaction(SIGTSTP, {SIG_DFL}, {SIG_IGN}, 8) = 0 18335 rt_sigaction(SIGTTIN, {SIG_DFL}, {SIG_IGN}, 8) = 0 18335 rt_sigaction(SIGTTOU, {SIG_DFL}, {SIG_IGN}, 8) = 0 18335 setpgid(18335, 18335) = 0 18335 rt_sigprocmask(SIG_BLOCK, [CHLD TSTP TTIN TTOU], [], 8) = 0 18335 ioctl(255, TIOCSPGRP, [18335]) = 0 18335 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 18335 close(4) = 0 18335 read(3, <unfinished ...> 16925 setpgid(18335, 18335) = 0 16925 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 16925 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0 16925 close(3) = 0 16925 close(4 <unfinished ...> 18335 <... read resumed> "", 1) = 0 18335 close(3) = 0 18335 rt_sigaction(SIGINT, {SIG_DFL}, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 18335 rt_sigaction(SIGQUIT, {SIG_DFL}, {SIG_IGN}, 8) = 0 18335 rt_sigaction(SIGTERM, {SIG_DFL}, {SIG_IGN}, 8) = 0 18335 rt_sigaction(SIGCHLD, {SIG_DFL}, {0x439910, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 18335 execve("/sbin/ifconfig", ["ifconfig"], [/* 41 vars */] <unfinished ...> 16925 <... close resumed> ) = 0 16925 rt_sigprocmask(SIG_BLOCK, [CHLD TSTP TTIN TTOU], [CHLD], 8) = 0 16925 ioctl(255, TIOCSPGRP, [18335]) = 0 16925 rt_sigprocmask(SIG_SETMASK, [CHLD], NULL, 8) = 0 16925 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 16925 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0 16925 wait4(-1, <unfinished ...> 18335 <... execve resumed> ) = 0 18335 brk(0) = 0x612000 18335 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f355eaa3000 18335 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) 18335 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f355eaa1000 18335 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) 18335 open("/etc/ld.so.cache", O_RDONLY) = 3 18335 fstat(3, {st_mode=S_IFREG|0644, st_size=43786, ...}) = 0 18335 mmap(NULL, 43786, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f355ea96000 18335 close(3) = 0 18335 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) 18335 open("/lib/libc.so.6", O_RDONLY) = 3 18335 read(3, "/177ELF/2/1/1/0/0/0/0/0/0/0/0/0/3/0>/0/1/0/0/0/340/342"..., 832) = 832 18335 fstat(3, {st_mode=S_IFREG|0755, st_size=1436976, ...}) = 0 18335 mmap(NULL, 3543672, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f355e525000 18335 mprotect(0x7f355e67d000, 2097152, PROT_NONE) = 0 18335 mmap(0x7f355e87d000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x158000) = 0x7f355e87d000 18335 mmap(0x7f355e882000, 17016, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f355e882000 18335 close(3) = 0 18335 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f355ea95000 18335 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f355ea94000 18335 arch_prctl(ARCH_SET_FS, 0x7f355ea946e0) = 0 18335 mprotect(0x7f355e87d000, 12288, PROT_READ) = 0 18335 munmap(0x7f355ea96000, 43786) = 0 18335 brk(0) = 0x612000 18335 brk(0x633000) = 0x633000 18335 uname({sys="Linux", node="ubuntu", ...}) = 0 18335 access("/proc/net", R_OK) = 0 18335 access("/proc/net/unix", R_OK) = 0 18335 socket(PF_FILE, SOCK_DGRAM, 0) = 3 18335 socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4 18335 access("/proc/net/if_inet6", R_OK) = -1 ENOENT (No such file or directory) 18335 access("/proc/net/ax25", R_OK) = -1 ENOENT (No such file or directory) 18335 access("/proc/net/nr", R_OK) = -1 ENOENT (No such file or directory) 18335 access("/proc/net/rose", R_OK) = -1 ENOENT (No such file or directory) 18335 access("/proc/net/ipx", R_OK) = -1 ENOENT (No such file or directory) 18335 access("/proc/net/appletalk", R_OK) = -1 ENOENT (No such file or directory) 18335 access("/proc/sys/net/econet", R_OK) = -1 ENOENT (No such file or directory) 18335 access("/proc/sys/net/ash", R_OK) = -1 ENOENT (No such file or directory) 18335 access("/proc/net/x25", R_OK) = -1 ENOENT (No such file or directory) 18335 open("/proc/net/dev", O_RDONLY) = 5 18335 fstat(5, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0 18335 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f355eaa0000 18335 read(5, "Inter-| Receive "..., 1024) = 574 18335 read(5, "", 1024) = 0 18335 close(5) = 0 18335 munmap(0x7f355eaa0000, 4096) = 0 18335 ioctl(4, SIOCGIFCONF, {80, {{"lo", {AF_INET, inet_addr("127.0.0.1")}}, {"eth0", {AF_INET, inet_addr("192.168.1.15")}}}}) = 0 18335 ioctl(4, SIOCGIFFLAGS, {ifr_name="eth0", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0 18335 ioctl(4, SIOCGIFHWADDR, {ifr_name="eth0", ifr_hwaddr=00:18:8b:f8:11:71}) = 0 18335 ioctl(4, SIOCGIFMETRIC, {ifr_name="eth0", ifr_metric=0}) = 0 18335 ioctl(4, SIOCGIFMTU, {ifr_name="eth0", ifr_mtu=1500}) = 0 18335 ioctl(4, SIOCGIFMAP, 0x7fff66aa3360) = 0 18335 ioctl(4, SIOCGIFMAP, 0x7fff66aa3360) = 0 18335 ioctl(4, SIOCGIFTXQLEN, 0x7fff66aa3360) = 0 18335 ioctl(4, SIOCGIFADDR, {ifr_name="eth0", ifr_addr={AF_INET, inet_addr("192.168.1.15")}}) = 0 18335 ioctl(4, SIOCGIFDSTADDR, {ifr_name="eth0", ifr_dstaddr={AF_INET, inet_addr("192.168.1.15")}}) = 0 18335 ioctl(4, SIOCGIFBRDADDR, {ifr_name="eth0", ifr_broadaddr={AF_INET, inet_addr("192.168.1.255")}}) = 0 18335 ioctl(4, SIOCGIFNETMASK, {ifr_name="eth0", ifr_netmask={AF_INET, inet_addr("255.255.255.0")}}) = 0 18335 fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 23), ...}) = 0 18335 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f355eaa0000 18335 write(1, "eth0 Link encap:Ethernet H"..., 58) = 58 18335 write(1, " inet addr:192.168.1.15"..., 74) = 74 18335 open("/proc/net/if_inet6", O_RDONLY) = -1 ENOENT (No such file or directory) 18335 write(1, " UP BROADCAST RUNNING M"..., 61) = 61 18335 write(1, " RX packets:2228924 err"..., 67) = 67 18335 write(1, " TX packets:2586821 err"..., 69) = 69 18335 write(1, " collisions:0 txqueuele"..., 40) = 40 18335 write(1, " RX bytes:950387678 (90"..., 70) = 70 18335 write(1, " Interrupt:16 /n", 24) = 24 18335 write(1, "/n", 1) = 1 18335 ioctl(4, SIOCGIFFLAGS, {ifr_name="eth1", ifr_flags=IFF_BROADCAST|IFF_MULTICAST}) = 0 18335 ioctl(4, SIOCGIFHWADDR, {ifr_name="eth1", ifr_hwaddr=00:18:8b:f8:11:72}) = 0 18335 ioctl(4, SIOCGIFMETRIC, {ifr_name="eth1", ifr_metric=0}) = 0 18335 ioctl(4, SIOCGIFMTU, {ifr_name="eth1", ifr_mtu=1500}) = 0 18335 ioctl(4, SIOCGIFMAP, 0x7fff66aa3360) = 0 18335 ioctl(4, SIOCGIFMAP, 0x7fff66aa3360) = 0 18335 ioctl(4, SIOCGIFTXQLEN, 0x7fff66aa3360) = 0 18335 ioctl(4, SIOCGIFADDR, {ifr_name="eth1", ???}) = -1 EADDRNOTAVAIL (Cannot assign requested address) 18335 ioctl(4, SIOCGIFFLAGS, {ifr_name="lo", ifr_flags=IFF_UP|IFF_LOOPBACK|IFF_RUNNING}) = 0 18335 ioctl(4, SIOCGIFHWADDR, {ifr_name="lo", ifr_hwaddr=00:00:00:00:00:00}) = 0 18335 ioctl(4, SIOCGIFMETRIC, {ifr_name="lo", ifr_metric=0}) = 0 18335 ioctl(4, SIOCGIFMTU, {ifr_name="lo", ifr_mtu=16436}) = 0 18335 ioctl(4, SIOCGIFMAP, 0x7fff66aa3360) = 0 18335 ioctl(4, SIOCGIFMAP, 0x7fff66aa3360) = 0 18335 ioctl(4, SIOCGIFTXQLEN, 0x7fff66aa3360) = 0 18335 ioctl(4, SIOCGIFADDR, {ifr_name="lo", ifr_addr={AF_INET, inet_addr("127.0.0.1")}}) = 0 18335 ioctl(4, SIOCGIFDSTADDR, {ifr_name="lo", ifr_dstaddr={AF_INET, inet_addr("127.0.0.1")}}) = 0 18335 ioctl(4, SIOCGIFBRDADDR, {ifr_name="lo", ifr_broadaddr={AF_INET, inet_addr("0.0.0.0")}}) = 0 18335 ioctl(4, SIOCGIFNETMASK, {ifr_name="lo", ifr_netmask={AF_INET, inet_addr("255.0.0.0")}}) = 0 18335 write(1, "lo Link encap:Local Loopb"..., 38) = 38 18335 write(1, " inet addr:127.0.0.1 M"..., 46) = 46 18335 open("/proc/net/if_inet6", O_RDONLY) = -1 ENOENT (No such file or directory) 18335 write(1, " UP LOOPBACK RUNNING M"..., 51) = 51 18335 write(1, " RX packets:274956 erro"..., 66) = 66 18335 write(1, " TX packets:274956 erro"..., 68) = 68 18335 write(1, " collisions:0 txqueuele"..., 37) = 37 18335 write(1, " RX bytes:938425986 (89"..., 71) = 71 18335 write(1, "/n", 1) = 1 18335 close(4) = 0 18335 exit_group(0) = ? 16925 <... wait4 resumed> [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WSTOPPED|WCONTINUED, NULL) = 18335 16925 rt_sigprocmask(SIG_BLOCK, [CHLD TSTP TTIN TTOU], [CHLD], 8) = 0 16925 ioctl(255, TIOCSPGRP, [16925]) = 0 16925 rt_sigprocmask(SIG_SETMASK, [CHLD], NULL, 8) = 0 16925 ioctl(255, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 16925 ioctl(255, TIOCGWINSZ, {ws_row=31, ws_col=114, ws_xpixel=0, ws_ypixel=0}) = 0 16925 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 16925 --- SIGCHLD (Child exited) @ 0 (0) --- 16925 wait4(-1, 0x7fffc0628744, WNOHANG|WSTOPPED|WCONTINUED, NULL) = -1 ECHILD (No child processes) 16925 rt_sigreturn(0x8) = 0 16925 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 16925 rt_sigaction(SIGINT, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigprocmask(SIG_BLOCK, [CHLD TSTP TTIN TTOU], [], 8) = 0 16925 ioctl(255, TIOCSPGRP, [16925]) = 0 16925 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 16925 rt_sigaction(SIGINT, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0 16925 ioctl(0, TIOCGWINSZ, {ws_row=31, ws_col=114, ws_xpixel=0, ws_ypixel=0}) = 0 16925 ioctl(0, TIOCSWINSZ, {ws_row=31, ws_col=114, ws_xpixel=0, ws_ypixel=0}) = 0 16925 ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 16925 ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 16925 ioctl(0, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig -icanon -echo ...}) = 0 16925 ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig -icanon -echo ...}) = 0 16925 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 16925 rt_sigprocmask(SIG_BLOCK, [INT QUIT ALRM TSTP TTIN TTOU], [], 8) = 0 16925 rt_sigaction(SIGINT, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGTERM, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGTERM, {SIG_IGN}, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGQUIT, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGQUIT, {SIG_IGN}, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGALRM, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {0x44c5b0, [HUP INT ILL TRAP ABRT BUS FPE USR1 SEGV USR2 PIPE ALRM TERM XCPU XFSZ VTALRM SYS], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGTSTP, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGTSTP, {SIG_IGN}, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGTTOU, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGTTOU, {SIG_IGN}, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGTTIN, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGTTIN, {SIG_IGN}, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 16925 rt_sigaction(SIGWINCH, {0x481920, [], SA_RESTORER|SA_RESTART, 0x7fccb7c9e100}, {0x44c430, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 write(2, "nomad2@ubuntu:/proc/16925/fd$ ", 30) = 30 16925 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 16925 read(0, /home/a/j/nomad2:

2) 线程

线程示例程序:

/home/a/j/nomad2:cat createthread.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h> void* thread(void * arg) { return NULL; } int main(void) { pthread_t thid; pthread_create(&thid, NULL, thread, NULL); pthread_create(&thid, NULL, thread, NULL); pthread_create(&thid, NULL, thread, NULL); pthread_create(&thid, NULL, thread, NULL); exit(0); }

strace输出

/home/a/j/nomad2:strace -o /tmp/strace.nomad2 -f -p 16925 Process 16925 attached - interrupt to quit Process 20043 attached (waiting for parent) Process 20043 resumed (parent 16925 ready) Process 16925 suspended Process 20044 attached (waiting for parent) Process 20044 resumed (parent 20043 ready) Process 20044 detached Process 20045 attached (waiting for parent) Process 20045 resumed (parent 20043 ready) Process 20045 detached Process 20046 attached (waiting for parent) Process 20046 resumed (parent 20043 ready) Process 20046 detached Process 20047 attached (waiting for parent) Process 20047 resumed (parent 20043 ready) Process 20047 detached Process 16925 resumed Process 20043 detached

log文件内容

/home/a/j/nomad2:cat /tmp/strace.nomad2 16925 read(0, "/r", 1) = 1 16925 write(2, "/n", 1) = 1 16925 rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0 16925 ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig -icanon -echo ...}) = 0 16925 ioctl(0, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig icanon echo ...}) = 0 16925 ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 16925 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 16925 rt_sigaction(SIGINT, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGTERM, {SIG_IGN}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGQUIT, {SIG_IGN}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGALRM, {0x44c5b0, [HUP INT ILL TRAP ABRT BUS FPE USR1 SEGV USR2 PIPE ALRM TERM XCPU XFSZ VTALRM SYS], SA_RESTORER, 0x7fccb7c9e100}, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGTSTP, {SIG_IGN}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGTTOU, {SIG_IGN}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGTTIN, {SIG_IGN}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGWINCH, {0x44c430, [], SA_RESTORER, 0x7fccb7c9e100}, {0x481920, [], SA_RESTORER|SA_RESTART, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGINT, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigprocmask(SIG_BLOCK, [INT CHLD], [], 8) = 0 16925 pipe([3, 4]) = 0 16925 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fccb861a770) = 20043 20043 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 20043 rt_sigaction(SIGTSTP, {SIG_DFL}, {SIG_IGN}, 8) = 0 20043 rt_sigaction(SIGTTIN, {SIG_DFL}, {SIG_IGN}, 8) = 0 20043 rt_sigaction(SIGTTOU, {SIG_DFL}, {SIG_IGN}, 8) = 0 20043 setpgid(20043, 20043) = 0 20043 rt_sigprocmask(SIG_BLOCK, [CHLD TSTP TTIN TTOU], [], 8) = 0 20043 ioctl(255, TIOCSPGRP, [20043]) = 0 20043 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 20043 close(4) = 0 20043 read(3, <unfinished ...> 16925 setpgid(20043, 20043) = 0 16925 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 16925 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0 16925 close(3) = 0 16925 close(4 <unfinished ...> 20043 <... read resumed> "", 1) = 0 20043 close(3) = 0 20043 rt_sigaction(SIGINT, {SIG_DFL}, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 20043 rt_sigaction(SIGQUIT, {SIG_DFL}, {SIG_IGN}, 8) = 0 20043 rt_sigaction(SIGTERM, {SIG_DFL}, {SIG_IGN}, 8) = 0 20043 rt_sigaction(SIGCHLD, {SIG_DFL}, {0x439910, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 20043 execve("./a.out", ["./a.out"], [/* 41 vars */] <unfinished ...> 16925 <... close resumed> ) = 0 16925 rt_sigprocmask(SIG_BLOCK, [CHLD TSTP TTIN TTOU], [CHLD], 8) = 0 16925 ioctl(255, TIOCSPGRP, [20043]) = 0 16925 rt_sigprocmask(SIG_SETMASK, [CHLD], NULL, 8) = 0 16925 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 16925 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0 16925 wait4(-1, <unfinished ...> 20043 <... execve resumed> ) = 0 20043 brk(0) = 0x601000 20043 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f92021c7000 20043 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) 20043 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f92021c5000 20043 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) 20043 open("/etc/ld.so.cache", O_RDONLY) = 3 20043 fstat(3, {st_mode=S_IFREG|0644, st_size=43786, ...}) = 0 20043 mmap(NULL, 43786, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f92021ba000 20043 close(3) = 0 20043 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) 20043 open("/lib/libpthread.so.0", O_RDONLY) = 3 20043 read(3, "/177ELF/2/1/1/0/0/0/0/0/0/0/0/0/3/0>/0/1/0/0/0/260W/0/0"..., 832) = 832 20043 fstat(3, {st_mode=S_IFREG|0755, st_size=130224, ...}) = 0 20043 mmap(NULL, 2208624, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f9201d8f000 20043 mprotect(0x7f9201da5000, 2097152, PROT_NONE) = 0 20043 mmap(0x7f9201fa5000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16000) = 0x7f9201fa5000 20043 mmap(0x7f9201fa7000, 13168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f9201fa7000 20043 close(3) = 0 20043 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) 20043 open("/lib/libc.so.6", O_RDONLY) = 3 20043 read(3, "/177ELF/2/1/1/0/0/0/0/0/0/0/0/0/3/0>/0/1/0/0/0/340/342"..., 832) = 832 20043 fstat(3, {st_mode=S_IFREG|0755, st_size=1436976, ...}) = 0 20043 mmap(NULL, 3543672, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f9201a2d000 20043 mprotect(0x7f9201b85000, 2097152, PROT_NONE) = 0 20043 mmap(0x7f9201d85000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x158000) = 0x7f9201d85000 20043 mmap(0x7f9201d8a000, 17016, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f9201d8a000 20043 close(3) = 0 20043 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f92021b9000 20043 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f92021b8000 20043 arch_prctl(ARCH_SET_FS, 0x7f92021b86e0) = 0 20043 mprotect(0x7f9201d85000, 12288, PROT_READ) = 0 20043 munmap(0x7f92021ba000, 43786) = 0 20043 set_tid_address(0x7f92021b8770) = 20043 20043 set_robust_list(0x7f92021b8780, 0x18) = 0 20043 futex(0x7fff0a1c68dc, 0x81 /* FUTEX_??? */, 1) = 0 20043 rt_sigaction(SIGRTMIN, {0x7f9201d942d0, [], SA_RESTORER|SA_SIGINFO, 0x7f9201d9d7d0}, NULL, 8) = 0 20043 rt_sigaction(SIGRT_1, {0x7f9201d94350, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7f9201d9d7d0}, NULL, 8) = 0 20043 rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0 20043 getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0 20043 mmap(NULL, 8392704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|0x40, -1, 0) = 0x4109c000 20043 brk(0) = 0x601000 20043 brk(0x622000) = 0x622000 20043 mprotect(0x4109c000, 4096, PROT_NONE) = 0 20043 clone(child_stack=0x4189c260, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x4189c9e0, tls=0x4189c950, child_tidptr=0x4189c9e0) = 20044 20044 set_robust_list(0x4189c9f0, 0x18) = 0 20044 _exit(0) = ? 20043 mmap(NULL, 8392704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|0x40, -1, 0) = 0x4189d000 20043 mprotect(0x4189d000, 4096, PROT_NONE) = 0 20043 clone(child_stack=0x4209d260, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x4209d9e0, tls=0x4209d950, child_tidptr=0x4209d9e0) = 20045 20045 set_robust_list(0x4209d9f0, 0x18) = 0 20045 _exit(0) = ? 20043 mmap(NULL, 8392704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|0x40, -1, 0) = 0x4209e000 20043 mprotect(0x4209e000, 4096, PROT_NONE) = 0 20043 clone(child_stack=0x4289e260, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x4289e9e0, tls=0x4289e950, child_tidptr=0x4289e9e0) = 20046 20046 set_robust_list(0x4289e9f0, 0x18) = 0 20046 _exit(0) = ? 20043 mmap(NULL, 8392704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|0x40, -1, 0) = 0x4289f000 20043 mprotect(0x4289f000, 4096, PROT_NONE) = 0 20043 clone(child_stack=0x4309f260, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x4309f9e0, tls=0x4309f950, child_tidptr=0x4309f9e0) = 20047 20047 set_robust_list(0x4309f9f0, 0x18) = 0 20047 _exit(0) = ? 20043 exit_group(0) = ? 16925 <... wait4 resumed> [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WSTOPPED|WCONTINUED, NULL) = 20043 16925 rt_sigprocmask(SIG_BLOCK, [CHLD TSTP TTIN TTOU], [CHLD], 8) = 0 16925 ioctl(255, TIOCSPGRP, [16925]) = 0 16925 rt_sigprocmask(SIG_SETMASK, [CHLD], NULL, 8) = 0 16925 ioctl(255, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 16925 ioctl(255, TIOCGWINSZ, {ws_row=31, ws_col=114, ws_xpixel=0, ws_ypixel=0}) = 0 16925 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 16925 --- SIGCHLD (Child exited) @ 0 (0) --- 16925 wait4(-1, 0x7fffc0628744, WNOHANG|WSTOPPED|WCONTINUED, NULL) = -1 ECHILD (No child processes) 16925 rt_sigreturn(0x8) = 0 16925 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 16925 rt_sigaction(SIGINT, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 stat("/var/mail/nomad2", 0x7fffc0627c10) = -1 ENOENT (No such file or directory) 16925 rt_sigprocmask(SIG_BLOCK, [CHLD TSTP TTIN TTOU], [], 8) = 0 16925 ioctl(255, TIOCSPGRP, [16925]) = 0 16925 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 16925 rt_sigaction(SIGINT, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0 16925 ioctl(0, TIOCGWINSZ, {ws_row=31, ws_col=114, ws_xpixel=0, ws_ypixel=0}) = 0 16925 ioctl(0, TIOCSWINSZ, {ws_row=31, ws_col=114, ws_xpixel=0, ws_ypixel=0}) = 0 16925 ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 16925 ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 16925 ioctl(0, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig -icanon -echo ...}) = 0 16925 ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig -icanon -echo ...}) = 0 16925 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 16925 rt_sigprocmask(SIG_BLOCK, [INT QUIT ALRM TSTP TTIN TTOU], [], 8) = 0 16925 rt_sigaction(SIGINT, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {0x44c7d0, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGTERM, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGTERM, {SIG_IGN}, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGQUIT, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGQUIT, {SIG_IGN}, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGALRM, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {0x44c5b0, [HUP INT ILL TRAP ABRT BUS FPE USR1 SEGV USR2 PIPE ALRM TERM XCPU XFSZ VTALRM SYS], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGTSTP, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGTSTP, {SIG_IGN}, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGTTOU, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGTTOU, {SIG_IGN}, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigaction(SIGTTIN, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, {SIG_IGN}, 8) = 0 16925 rt_sigaction(SIGTTIN, {SIG_IGN}, {0x481960, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 16925 rt_sigaction(SIGWINCH, {0x481920, [], SA_RESTORER|SA_RESTART, 0x7fccb7c9e100}, {0x44c430, [], SA_RESTORER, 0x7fccb7c9e100}, 8) = 0 16925 write(2, "nomad2@ubuntu:~/c$ ", 19) = 19 16925 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 16925 read(0, "p", 1) = 1 16925 write(2, "p", 1) = 1 16925 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 16925 read(0, "w", 1) = 1 16925 write(2, "w", 1) = 1 16925 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 16925 read(0, "d", 1) = 1 16925 write(2, "d", 1) = 1 16925 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 16925 read(0, /home/a/j/nomad2:

总结:通过strace可以看到系统内核实现时的C源代码

3. ltrace

ltrace: trace library calls

常用的选项:-f -o -p

例如:

/home/a/j/nomad2:ltrace ./a.out __libc_start_main(0x400567, 1, 0x7fff3fc9a498, 0x4005f0, 0x4005e0 <unfinished ...> pthread_create(0x7fff3fc9a3a8, 0, 0x400558, 0, 0x7fbd3785b2e0) = 0 pthread_create(0x7fff3fc9a3a8, 0, 0x400558, 0, 0x4172a950) = 0 pthread_create(0x7fff3fc9a3a8, 0, 0x400558, 0, 0x41f2b950) = 0 pthread_create(0x7fff3fc9a3a8, 0, 0x400558, 0, 0x4272c950) = 0 exit(0 <unfinished ...> +++ exited (status 0) +++ /home/a/j/nomad2:cc hello.c /home/a/j/nomad2:ltrace ./a.out __libc_start_main(0x400498, 1, 0x7fffdb765f68, 0x4004c0, 0x4004b0 <unfinished ...> puts("hello world!"hello world! ) = 13 +++ exited (status 0) +++

4. screen

参考http://www.ibm.com/developerworks/cn/linux/l-cn-screen/

常用的命令: screen -r -x

不要使用KSH

Ctrl+a 然后d退出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值