标签: strace

如何将 pv 与 dd 一起使用?

我正在尝试使用 dd 和 pv 将 iso 写入 USB 驱动器。我做了:

iso="myiso.iso"; dd if="$iso" bs=1M | pv --eta --size $(ls -l "$iso" | awk '{print $5}') --progress --bytes --rate --wait > /dev/sdg
Run Code Online (Sandbox Code Playgroud)

遵循本指南:https : //gist.github.com/rriemann/1406035

但是,发生的情况是根据 pv 的输出非常快速地“写入”iso。我猜它都被放到了磁盘缓存或类似的地方。然后 pv 就挂了。ps 显示 pv 仍在运行,但 dd 不是。我试过 stracing pv,但没有输出,strace 也挂了!ctrl+c 对 strace 没有影响。事实上,它不响应信号 15、3、2 或 1。为每个信号等待几分钟。我最终被迫发送了 9。

根据这个:http : //www.reddit.com/r/linux/comments/1xvr25/linux_tip_dont_use_kill_9/ strace 二进制文件表现不佳。

以下是我的问题:

  1. 如何让光伏报告更有用的数据?我知道它可能正在做它“应该做的”,即,只是报告它管道的字节。但这对我想知道的内容没有帮助,这是对写入 USB 驱动器、eta 等的字节的粗略估计。

  2. 为什么 strace 不响应任何信号?我的猜测是,在处理下一个信号之前,strace 会等待来自它正在监视的进程的系统调用,我认为这是一个错误。但这只是一个猜测。strace 版本 4.5.20。

dd strace pv

3
推荐指数
1
解决办法
1811
查看次数

删除一个空文件,为什么会有这么多的sys调用?

尝试创建一个空文件并跟踪删除它所涉及的操作。名单很长:

touch a
strace rm a
execve("/bin/rm", ["rm", "a"], [/* 20 vars */]) = 0
brk(0)                                  = 0x65f000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd579b94000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=25132, ...}) = 0
mmap(NULL, 25132, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fd579b8d000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = …
Run Code Online (Sandbox Code Playgroud)

linux rm strace

3
推荐指数
1
解决办法
374
查看次数

为什么我不能在 rsh 中使用 strace?

如果我运行 rsh,它可以工作,但会在开头打印一些奇怪的“连接被拒绝”消息:

$ rsh localhost pwd
connect to address 127.0.0.1 port 544: Connection refused
Trying krb4 rsh...
connect to address 127.0.0.1 port 544: Connection refused
trying normal rsh (/usr/bin/rsh)
/home/service
Run Code Online (Sandbox Code Playgroud)

但是如果我在 strace 下运行 rsh,它根本不会连接到服务器:

$ strace -c rsh localhost ulimit -n
connect to address 127.0.0.1 port 544: Connection refused
Trying krb4 rsh...
connect to address 127.0.0.1 port 544: Connection refused
trying normal rsh (/usr/bin/rsh)
rcmd: socket: Permission denied
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- …
Run Code Online (Sandbox Code Playgroud)

permissions tcp socket strace rsh

2
推荐指数
1
解决办法
2815
查看次数

理解这个 strace 输出

任何人都可以理解这个strace输出吗?

[pid 25302] read(34, "}B\311\204\n\250\347$\220\266kRb\304a^^\2504\303k\235\227T\223\16\231\306\277\254\256\306", 32) = 32
Run Code Online (Sandbox Code Playgroud)

它来自通过 Tomcat 运行 Java 应用程序的 Linux 系统。它试图读取一些东西,但它有这个奇怪的字符串,而不是文件名。这是我认为应用程序失败的地方,也是我不明白的部分。

linux java strace tomcat

2
推荐指数
1
解决办法
1376
查看次数

Strace Hello World 程序

所以我试图通过以下“Hello World!”来理解系统调用。程序:

#include <stdio.h>

int main(){

   printf("Hello World!\n");
   return 0;

}
Run Code Online (Sandbox Code Playgroud)

然后我在可执行文件上运行 strace 并得到以下信息:

execve("./hello", ["./hello"], [/* 62 vars */]) = 0
brk(0)                                  = 0x85a5000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb774f000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/home/miguel/GNUstep/Library/Libraries/tls/i686/sse2/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/home/miguel/GNUstep/Library/Libraries/tls/i686/sse2", 0xbf8df160) = -1 ENOENT (No such file or directory)
open("/home/miguel/GNUstep/Library/Libraries/tls/i686/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/home/miguel/GNUstep/Library/Libraries/tls/i686", 0xbf8df160) = -1 ENOENT (No such …
Run Code Online (Sandbox Code Playgroud)

system-calls strace

2
推荐指数
1
解决办法
1448
查看次数

为什么 strace 在 execve() 命令之前不报告父 shell fork() 是一个子进程?

strace运行指定的命令直到它退出。它拦截并记录进程调用的系统调用和进程接收到的信号。

在 bash shell 中运行外部命令时,shell 首先fork()是子进程,然后是子进程中execve()的命令。所以我想这strace会报告fork()或类似的东西,例如clone()

但下面的例子表明它没有。为什么在命令之前不strace报告父shellfork()子进程execve()?谢谢。

$ strace -f time
execve("/usr/bin/time", ["time"], [/* 66 vars */]) = 0
brk(0)                                  = 0x84c000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efe9b2a5000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=141491, ...}) = 0
mmap(NULL, 141491, PROT_READ, MAP_PRIVATE, …
Run Code Online (Sandbox Code Playgroud)

shell bash fork strace

2
推荐指数
1
解决办法
3499
查看次数

strace找不到带有“无法统计”错误的shell函数

我试图调用一个自定义函数funk_astrace但它似乎没有找到它。我确认 funk_a 可以被自己调用。我很欣赏任何意见。

$ source ./strace_sample.sh 
$ funk_a
Earth, Wind, Fire and Water
$ funk_b
Get on up
strace: Can't stat 'funk_a': No such file or directory

$ dpkg -p strace|grep Vers
Version: 4.8-1ubuntu5
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.5 LTS
Release:        14.04
Codename:       trusty
Run Code Online (Sandbox Code Playgroud)

strace_sample.sh

#!/bin/bash

function funk_a {
  echo "Earth, Wind, Fire and Water"
}

function funk_b {
  echo "Get on up"
  strace -o trace_output.txt -c …
Run Code Online (Sandbox Code Playgroud)

shell function strace

2
推荐指数
1
解决办法
5731
查看次数

有没有办法使用 strace 来跟踪命令管道的不同部分?

我有一个这样的管道:

command1 | command2
Run Code Online (Sandbox Code Playgroud)

有没有办法同时跟踪两个命令?

linux strace trace

2
推荐指数
1
解决办法
2117
查看次数

为什么 strace 显示 syscall =?

我进行了系统调用并重新编译了内核,但是在运行系统调用时它返回了 Killed。因此,为了跟踪它,我使用了 strace,它显示了以下消息: syscall_0x224(0x7ffda7199738, 0x7ffda7199748, 0x55743750a6d0, 0x7f9f20df7d80, 0x7f9f20df7d80, 0x7ffda7199730) = ?

这是什么意思(不是十六进制,问号)?

linux c kernel system-calls strace

2
推荐指数
1
解决办法
275
查看次数

如何从系统调用解析 strace recv?

我跟踪了一个curl命令:

strace -s 2000 -f curl google.com
Run Code Online (Sandbox Code Playgroud)

并看到 2 个 DNS 查询

recvfrom(3, "\302\325\201\200\0\1\0\1\0\0\0\0\6google\3com\0\0\34\0\1\6google\3com\0\0\34\0\1\0\0\0\362\0\20*\0\24P@\t\10\v\0\0\0\0\0\0 \16", 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.65.7")}, [28->16]) = 66
recvfrom(3, "X\320\201\200\0\1\0\1\0\0\0\0\6google\3com\0\0\1\0\1\6google\3com\0\0\1\0\1\0\0\1)\0\4\216\372\263\356", 65536, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.65.7")}, [28->16]) = 54
Run Code Online (Sandbox Code Playgroud)

然后,我看到对 142.250.179.238 的 connect() 系统调用,这是 Google 的 IP。

connect(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("142.250.179.238")}, 16) = 0
Run Code Online (Sandbox Code Playgroud)

我相信2个recvfrom调用之一包含IP“142.250.179.238”,否则curl无法知道要连接的IP。

我的问题:2个recvfrom字符串的格式是什么?以及如何解析它来获取IP地址?

"\302\325\201\200\0\1\0\1\0\0\0\0\6google\3com\0\0\34\0\1\6google\3com\0\0\34\0\1\0\0\0\362\0\20*\0\24P@\t\10\v\0\0\0\0\0\0 \16"
"X\320\201\200\0\1\0\1\0\0\0\0\6google\3com\0\0\1\0\1\6google\3com\0\0\1\0\1\0\0\1)\0\4\216\372\263\356"
Run Code Online (Sandbox Code Playgroud)

linux dns curl strace

2
推荐指数
1
解决办法
399
查看次数

strace 如何知道使用 /bin/echo 而不是内置的失败

当我这样做时strace echo hello,我看到它正在使用/bin/echo,但echo应该首先找到内置的。跳过内置命令是strace的功能吗?strace -- 版本 4.5.19

我知道 strace 不能像处理系统可执行文件那样处理内置命令。

linux bash strace

0
推荐指数
1
解决办法
1190
查看次数

标签 统计

strace ×11

linux ×6

bash ×2

shell ×2

system-calls ×2

c ×1

curl ×1

dd ×1

dns ×1

fork ×1

function ×1

java ×1

kernel ×1

permissions ×1

pv ×1

rm ×1

rsh ×1

socket ×1

tcp ×1

tomcat ×1

trace ×1