首页 > 试题广场 >

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

[不定项选择题]
Linux执行ls,会引起哪些系统调用()
  • nmap
  • read
  • execve
  • fork
B C D
strace命令没有写出对fork的调用是有原因的,可以参见这篇文章:
http://thorstenball.com/blog/2014/06/13/where-did-fork-go/
发表于 2015-08-02 09:33:45 回复(0)
注意nmap不是mmap
发表于 2015-08-13 02:15:45 回复(1)
任何shell都会执行 exec 和 fork
而    ls会执行read
三个加起来
发表于 2017-06-20 18:29:50 回复(1)
BC

可以通过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


编辑于 2017-05-03 17:11:00 回复(4)
BCD都应该对才是,shell命令执行机制就是 fork+exec 执行命令,虽然用strace查看引起的系统调用没有fork,不过我想是因为执行任何一个shell命令都会调用fork,所以它就没写了。。。。。
发表于 2015-06-08 17:34:53 回复(9)
任何shell都会执行 exec 和 fork
而    ls会执行read
三个加起来
发表于 2019-06-21 22:25:03 回复(0)
nmap使用一些技术检测目标主机操作系统网络协议栈的特征
发表于 2021-09-03 13:55:33 回复(0)
fork,source和exec方式执行Shell脚本 

发表于 2021-03-11 14:00:48 回复(1)
shell 都会执行 exec fork
发表于 2020-10-19 09:08:15 回复(0)
shell下任何命令都会执行exec+fork
发表于 2017-09-28 15:05:37 回复(0)
很厉害 完美的避开了所以的正确答案(~V~)
发表于 2017-09-11 22:24:58 回复(2)
由于Linux系统的本身使用clone(2)来代替fork(2)的使用,所以strace不会打印fork。
注:Linux内核中本身有普通进程和轻量级进程的概念(Linux内核是不认识线程的),轻量级进程可以用来实现线程,而clone可以用来控制进程生成时候的属性,所以多用clone来代替fork。
发表于 2016-04-11 14:55:10 回复(0)

A.nmap不会与ls命令有关。nmap是一个网络探测和安全评估工具,用于扫描主机和端口等信息。

B.read系统调用可能会用于从标准输入读取命令行参数。在执行ls命令时,通常可以通过命令行选项传递参数,例如ls -l。在 Linux 中,标准输入的文件描述符是 0,因此read可能会被用来读取标准输入的内容。

C.execve系统调用将负责加载和执行ls命令的可执行文件。在 Linux 中,每个命令都是一个可执行文件,存储在文件系统中的某个位置。当执行ls命令时,操作系统内核会使用execve系统调用来加载ls可执行文件并在新进程中执行它。

D.fork系统调用也可能会被使用,因为ls命令需要创建一个新的进程来执行。fork系统调用将创建一个新的进程,该进程是父进程的副本。在创建子进程之后,子进程可以通过execve系统调用来执行ls命令。

发表于 2023-11-01 11:08:46 回复(0)
任何shell都会执行exec和fork
ls会执行read
发表于 2018-08-02 21:30:50 回复(0)
shell命令执行机制是fork+exec执行命令,
而ls需要调用read
发表于 2017-07-22 22:04:07 回复(0)
任何shell都会执行 exec 和 fork+ls执行read系统调用读取目录文件
编辑于 2024-01-15 20:02:44 回复(0)
mmap是一种内存映射文件的方法
发表于 2022-07-26 21:57:44 回复(0)
nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统。
                                                                                    --------百度百科
发表于 2020-02-29 16:42:00 回复(0)
**p不选
发表于 2019-11-21 18:52:44 回复(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 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
发表于 2019-03-07 13:08:28 回复(0)