曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3591|回复: 0
打印 上一主题 下一主题

strace 与 stdin, stdout, stderr, 管道及重定向

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2012-11-15 19:55:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
strace 可以用来跟踪程序执行时的系统调用及信号。

比如执行 strace echo "groad" ,你可以看到 strace 的输出 echo 指向时所用到的系统调用。但是,如果希望过滤出所有的 open() 系统调用,我们自然会想到使用下面命令:
strace echo "groad" | gep "open"
然后执行的结果并非如我们所愿。

这是因为,strace 的是从标准错误(stderr) 输出结果的,而管道符的作用是,将左边标准输出(stdout)的内容输送到右边的标准输入(stdin) 。因此,如果我们希望向上面那样过滤出 open() 这个调用,那么可以如下做法:
[beyes@beyes   strace]$ strace echo "hello" 2>&1 |grep "open"
open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/lib/libc.so.6", O_RDONLY)        = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3
由上可见,这样工作就正常了。上面,&1 表示的是标准输出(stdout) 。

类似的,可以将 strace 的输出结果重定向到文件中,比如:
strace echo "groad" > myfile.txt 2>&1
可替换的一种写法是:
strace echo "groad" &> myfile.txt
上面的这种写法将输出内容(包括 stdout 和 stdout)一股脑的重定向到 myfile.txt 中。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-28 17:24 , Processed in 0.073523 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表