Linux执行ls,会引起哪些系统调用
可以通过strace -o ls.txt ls进行查看:open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3 ///打开当前目录这个文件(目录是一种特殊的文件),并返回文件句柄3fstat64(3, {st_mode=S_IFDIR|0755, st_size=4096, }) = 0 ///取得当
·
可以通过strace -o ls.txt ls进行查看:
open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3 ///打开当前目录这个文件(目录是一种特殊的文件),并返回文件句柄3
fstat64(3, {st_mode=S_IFDIR|0755, st_size=4096, }) = 0 ///取得当前目录文件的属性,比如这里大小为4096
open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3 ///打开当前目录这个文件(目录是一种特殊的文件),并返回文件句柄3
fcntl64(3, F_GETFD) = 0x1 (flags FD_CLOEXEC)
getdents64(3, /* 33 entries */, 4096) = 1104 ///读取当前目录下的文件
getdents64(3, /* 0 entries */, 4096) = 0
close(3) = 0 ///关闭当前目录文件的句柄
。。。
通过# cat ls.txt | awk -F '(' {'print $1'} | sort | uniq 可以看到所有的命令
access
arch_prctl
brk
close
execve
exit_group
fstat
futex
getdents
getrlimit
ioctl
mmap
mprotect
munmap
open
openat
read
rt_sigaction
rt_sigprocmask
set_robust_list
set_tid_address
statfs
write
。。。
通过# cat ls.txt | awk -F '(' {'print $1'} | sort | uniq 可以看到所有的命令
access
arch_prctl
brk
close
execve
exit_group
fstat
futex
getdents
getrlimit
ioctl
mmap
mprotect
munmap
open
openat
read
rt_sigaction
rt_sigprocmask
set_robust_list
set_tid_address
statfs
write
shell命令执行机制就是 fork+exec 执行命令,虽然用strace查看引起的系统调用没有fork,不过我想是因为执行任何一个shell命令都会调用fork,所以它就没写了。。。。。
更多推荐
已为社区贡献3条内容
所有评论(0)