来自bash中进程的最后一次系统调用

时间:2015-10-04 22:05:35

标签: linux bash

只有在我有权阅读时,才需要从bash脚本中的进程获取最后一次系统调用。我这样做:

# $pid is the pid from the process
cat /proc/$pid/syscall

但是当我这样做时,我收到了这样的信息:

cat: /proc/21/syscall: Permission denied

或者这个:

cat: /proc/2101/syscall: Operation not permitted

这是对的吗?显然权限被拒绝意味着我无法阅读它。但“不允许行动”是什么意思?

从一个过程中,我得到了这一行:

0 0x3 0x717000 0x10000 0x7ffca5422b00 0x0 0x79 0x7ffca5422c50 0x7f840be43810

哪一个是最后一次系统调用?

2 个答案:

答案 0 :(得分:3)

关于Operation not permitted,这是因为您具有对该文件的读取权限(该进程由您拥有),但内核禁止您这样做。

如果在出现该错误后运行dmesg,您将看到以下行:

ptrace of pid 12304 was attempted by: cat (pid 12342)

这是因为内核避免跟踪不是当前进程的子进程。这是通过kernel.yama.ptrace_scope配置选项控制的。如果你这样做

cat /proc/sys/kernel/yama/ptrace_scope

它的值为1.

更多信息:https://wiki.ubuntu.com/SecurityTeam/Roadmap/KernelHardening#ptrace

答案 1 :(得分:0)

如何使用strace

$ strace -o /tmp/out command args; tail -n 2 /tmp/out
exit_group(0)                           = ?
+++ exited with 0 +++