2

「strace wgetgrooveshark.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 

write(2, "HTTP リクエストが送信され、応答を待っています"..., 40HTTP リクエストが送信され、応答を待っています... ) = 40

する必要があります

write(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})

そして正しく終了します。

ありがとう

4

2 に答える 2

5

wget の出力と strace の出力が混在しています。straceこれが起こらないように、-o オプションを使用してトレースをファイルに保存します。

write(2, "HTTP リクエストが送信され、応答を待っています"..., 40HTTP リクエストが送信され、応答を待っています... ) = 40

wget でのこの書き込み呼び出しは、メッセージを stderr に出力し、それが戻る前に、その出力が 40 と閉じ括弧の間のターミナルに表示されます。

于 2012-06-13T07:30:27.393 に答える
3

デフォルトでは、通常は端末ウィンドウであるstderrstraceに出力されます。したがって、 で指定されたトレースは、トレースされたプログラムの出力と混合されます。strace

strace -o /tmp/wget.tr wget http://grooveshark.com/ファイル内のトレースを取得するために実行/tmp/wget.trできます (また、別のターミナルで同時に実行tail -f /tmp/wget.trして内部を調べることもできます)。

man straceの出力を注意深く読むことをお勧めします。

于 2012-06-13T07:28:40.130 に答える