您的位置:首页 > 运维架构 > Linux

Linux执行ls,会引起哪些系统调用

2017-08-23 19:58 801 查看
可以通过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
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

shell命令执行机制就是 fork+exec 执行命令,虽然用strace查看引起的系统调用没有fork,不过我想是因为执行任何一个shell命令都会调用fork,所以它就没写了。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: