n0p*_*0pe 2 linux unix process kernel strace
最近,我正在使用mv将大量文件从硬盘驱动器移动到闪存驱动器。我忘记添加详细标志,所以我不知道移动的“位置”以及剩余的传输数量。
我找到了该strace实用程序并决定在我的 mv 过程中使用它。使用ps -ef | grep mv我能够找到进程的 pid 然后运行strace -p [PID]. 这是我得到的样本:
write(4, "\325\0\0s\1\1\224\0\0\0\0\0109\27\0\0\201\327\0\0\240H:\310xgM\337\274\26\"\273"..., 32768) = 32768
read(3, "\6\3319H\r\207\345\257\301JL)\2601C\t\303\22(\214\353\211\230;{\6\214\355nh@F"..., 32768) = 32768
write(4, "\6\3319H\r\207\345\257\301JL)\2601C\t\303\22(\214\353\211\230;{\6\214\355nh@F"..., 32768) = 32768
read(3, "ZK\301\332\263\214@\177\3352$\374\277];\255\265\364\240d\275\307P\237*\364\23\206\31\306\244\256"..., 32768) = 32768
write(4, "ZK\301\332\263\214@\177\3352$\374\277];\255\265\364\240d\275\307P\237*\364\23\206\31\306\244\256"..., 32768) = 32768
read(3, ".\341\355\32\366\7\365\244\4\4\221{c,$\246]\204\342\261\"\374K\234\264\17\26\346\246\327\347m"..., 32768) = 32768
Run Code Online (Sandbox Code Playgroud)
然后还有一些:
fcntl(3, F_GETFD) = 0
fcntl(3, F_SETFD, FD_CLOEXEC) = 0
fstat(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
fcntl(3, F_GETFL) = 0x38800 (flags O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_NOFOLLOW)
fcntl(3, F_SETFD, FD_CLOEXEC) = 0
fcntl(3, F_DUPFD, 3) = 4
fcntl(4, F_GETFD) = 0
fcntl(4, F_SETFD, FD_CLOEXEC) = 0
getdents64(3, /* 4 entries */, 32768) = 120
getdents64(3, /* 0 entries */, 32768) = 0
close(3) = 0
newfstatat(4, "The Pick of Destiny", {st_mode=S_IFDIR|0755, st_size=4096, ...}, AT_SYMLINK_NOFOLLOW) = 0
openat(4, "The Pick of Destiny", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_DIRECTORY|O_NOFOLLOW) = 3
fcntl(3, F_GETFD) = 0
fcntl(3, F_SETFD, FD_CLOEXEC) = 0
fstat(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
fcntl(3, F_GETFL) = 0x38800 (flags O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_NOFOLLOW)
fcntl(3, F_SETFD, FD_CLOEXEC) = 0
fcntl(3, F_DUPFD, 3) = 5
fcntl(5, F_GETFD) = 0
fcntl(5, F_SETFD, FD_CLOEXEC) = 0
getdents64(3, /* 22 entries */, 32768) = 1008
getdents64(3, /* 0 entries */, 32768) = 0
close(3) = 0
Run Code Online (Sandbox Code Playgroud)
那么,strace 到底给了我什么?这些是内核调用吗?如果是,它们是什么意思(我知道读和写的作用,但这些数字是什么)?
附加问题:有没有办法让我看到比 strace 显示的“低”的东西?CPU调用可能吗?
那么,strace 到底给了我什么?
什么strace是给你的系统调用-这是请求内核调用做一些事情,这个过程本身不能做,如打开文件。(例如fcntl,close在您的跟踪中找到等)。
如果是,它们是什么意思(我知道读和写的作用,但这些数字是什么)?
fcntl(3, F_GETFD) = 0
转换为:带有参数 (3, F_GETFD) 的系统调用 (fcntl) 返回值 (0)。
附加问题:有没有办法让我看到比 strace 显示的“低”的东西?CPU调用可能吗?
您的意思是 1) CPU 中断或 2) 汇编指令。老实说,我不知道,但是:
strace 有一个手册页 - 如果你想了解它的工作原理,我建议你阅读它。
| 归档时间: |
|
| 查看次数: |
2649 次 |
| 最近记录: |