wget的strace给出了奇怪的套接字调用

时间:2012-06-13 07:23:18

标签: linux sockets ubuntu wget strace

“strace wget grooveshark.com”停止了奇怪的套接字调用,错误的字符串长度,我必须按Ctrl + C终止。

write(2, "Connecting to grooveshark.com (g"..., 67Connecting to grooveshark.com (grooveshark.com)|8.20.213.76|:80... ) = 67
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("8.20.213.76")}, 16) = 0
write(2, "connected.\n", 11connected.
)            = 11
select(4, NULL, [3], NULL, {900, 0})    = 1 (out [3], left {899, 999993})
write(3, "GET / HTTP/1.1\r\nUser-Agent: Wget"..., 115) = 115
write(2, "HTTP request sent, awaiting resp"..., 40HTTP request sent, awaiting response... ) = 40 [[ Check this line ]]
select(4, [3], NULL, NULL, {900, 0} ^C 

写(2,“发送HTTP请求,等待resp”......,发送40HTTP请求,等待响应......)= 40

应该是

写(2,“发送HTTP请求,等待响应......”,40)= 40

但strace wget google.com给出了

write(3, "GET / HTTP/1.1\r\nUser-Agent: Wget"..., 116) = 116
write(2, "HTTP request sent, awaiting resp"..., 40) = 40
select(4, [3], NULL, NULL, {900, 0})    = 1 (in [3], left {899, 932611})

并正确终止。

由于

2 个答案:

答案 0 :(得分:5)

您看到wget的输出与strace的输出混合在一起。使用strace的-o选项将跟踪存储在文件中,以便不会发生这种情况。

  

写(2,“发送HTTP请求,等待resp”......,发送40HTTP请求,等待响应......)= 40

wget中的这个写调用将消息输出到stderr,在它返回之前,它的输出在终端中看到,在40和右括号之间

答案 1 :(得分:3)

默认情况下strace输出 stderr ,它通常是您的终端窗口。因此strace给出的跟踪与跟踪程序的输出混合在一起。

您可以运行strace -o /tmp/wget.tr wget http://grooveshark.com/来获取文件/tmp/wget.tr中的跟踪(并且您可以在另一个终端中同时运行tail -f /tmp/wget.tr以查看内部信息。)

我建议仔细阅读man strace的输出。