面试题(二十三)操作系统(一)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 1.1 Linux里如何查看一个想知道的进程?参考回答查看进程运行状态的指令:ps命令。“ps -aux | grep PID”,用来查看某PID进程状态答案解析//ps使用示例 //显示当前所有进程 ps -A //与grep联用查找某进程 ps -aux | grep apache //查看进程运行状态、查看内存使用情况的指令均可使用top指令。 top1.2 Linux里如何查看带有关键字的日志文件?参考回答1. cat 路径/文件名 | grep 关键词# 返回test.log中包含http的所有行 cat test.log | grep "http"

1.1 Linux里如何查看一个想知道的进程?

参考回答

查看进程运行状态的指令:ps命令。“ps -aux | grep PID”,用来查看某PID进程状态

答案解析

//ps使用示例 //显示当前所有进程   ps -A   //与grep联用查找某进程   ps -aux | grep apache    //查看进程运行状态、查看内存使用情况的指令均可使用top指令。 top

1.2 Linux里如何查看带有关键字的日志文件?

参考回答

  1. cat 路径/文件名 | grep 关键词

# 返回test.log中包含http的所有行 cat test.log | grep "http"

  1. grep -i 关键词 路径/文件名(与方法一效果相同,不同写法而已)

# 返回test.log中包含http的所有行(-i忽略大小写) grep -i "http" ./test.log

1.3 说说你对grep命令的了解?

参考回答

grep 命令。强大的文本搜索命令,grep(Global Regular Expression Print) 全局正则表达式搜索。

grep 的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。

答案解析

1. //参数   2. -A n --after-context显示匹配字符后n行   3. -B n --before-context显示匹配字符前n行   4. -C n --context 显示匹配字符前后n行   5. -c --count 计算符合样式的列数   6. -i 忽略大小写   7. -l 只列出文件内容符合指定的样式的文件名称   8. -f 从文件中读取关键词   9. -n 显示匹配内容的所在文件中行数   10. -R 递归查找文件夹   11.    12. //grep 的规则表达式:   13. ^       #锚定行的开始 如:'^grep'匹配所有以grep开头的行。    14. $       #锚定行的结束 如:'grep$'匹配所有以grep结尾的行。    15. .       #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。     16. *       #匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。   17. .*      #一起用代表任意字符。     18. []      #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。    19. [^]     #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。     20. \(..\)  #标记匹配字符,如'\(love\)',love被标记为1。      21. \<      #锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。   22. \>      #锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。   23. x\{m\}  #重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。    24. x\{m,\} #重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。     25. x\{m,n\}#重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。     26. \w      #匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。     27. \W      #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。     28. \b      #单词锁定符,如: '\bgrep\b'只匹配grep。    //实例: 1. //查找指定进程   2. ps -ef | grep svn   3.    4. //查找指定进程个数   5. ps -ef | grep svn -c   6.    7. //从文件中读取关键词   8. cat test1.txt | grep -f key.log   9.    10. //显示包含 ed 或者 at 字符的内容行   11. grep -E 'ed|at' test.txt  

1.4 Linux修改主机名的命令是什么?

参考回答

  1. 如果只需要临时更改主机名,可以使用hostname命令。sudo hostname <new-hostname> # 例如: sudo hostname myDebian #myDebian为修改名
  2. 如果想永久改变主机名,可以使用hostnamectl命令sudo hostnamectl set-hostname myDebian #myDebian为修改名

1.5 Linux开机自动执行命令如何实现?

参考回答

  1. 方法 #1 - 使用 cron 任务除了常用格式(分 / 时 / 日 / 月 / 周)外,cron 调度器还支持 @reboot 指令。这个指令后面的参数是脚本(启动时要执行的那个脚本)的绝对路径。然而,这种方法需要注意两点:a) cron 守护进程必须处于运行状态(通常情况下都会运行),同时b) 脚本或 crontab 文件必须包含需要的环境变量。
  2. 方法 #2 - 使用 /etc/rc.d/rc.local这个方法对于 systemd-based 发行版 Linux 同样有效。不过,使用这个方法,需要授予 /etc/rc.d/rc.local 文件执行权限:# chmod +x /etc/rc.d/rc.local然后在这个文件底部添加脚本。

1.6 Linux查看内存的命令是什么?

参考回答

查看内存使用情况的指令free命令。“free -m”,命令查看内存使用情况。

查看进程运行状态、查看内存使用情况的指令均可使用top指令

答案解析

  1. free命令Linux free命令用于显示内存状态free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。参数如下:-b 以Byte为单位显示内存使用情况。 -k 以KB为单位显示内存使用情况。 -m 以MB为单位显示内存使用情况。 -h 以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。单位有:         B = bytes         K = kilos         M = megas         G = gigas         T = teras -o 不显示缓冲区调节列。 -s<间隔秒数> 持续观察内存使用状况。 -t 显示内存总和列。 -V 显示版本信息。实例:显示内存使用情况# free //显示内存使用信息 total used free shared buffers cached Mem: 254772 184568 70204 0 5692 89892 -/+ buffers/cache: 88984 165788 Swap: 524280 65116 459164
  2. top命令top命令。显示当前系统正在执行的进程的相关信息,包括进程 ID、内存占用率、CPU 占用率等前五行是当前系统情况整体的统计信息区。
  1. 第一行,任务队列信息,同 uptime 命令的执行结果,具体参数说明情况如下:00:12:54 — 当前系统时间up ?days, 4:49 — 系统已经运行了?天4小时49分钟(在这期间系统没有重启过)21users — 当前有1个用户登录系统load average: 0.06, 0.02, 0.00 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
  2. 第二行,Tasks — 任务(进程),具体信息说明如下:系统现在共有256个进程,其中处于运行中的有1个,177个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。
  3. 第三行,cpu状态信息,具体属性说明如下:0.2%us — 用户空间占用CPU的百分比。0.2% sy — 内核空间占用CPU的百分比。0.0% ni — 改变过优先级的进程占用CPU的百分比99.5% id — 空闲CPU百分比0.0% wa — IO等待占用CPU的百分比0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比0.0% si — 软中断(Software Interrupts)占用CPU的百分比
  4. 第四行,内存状态,具体信息如下:2017552 total — 物理内存总量720188 used — 使用中的内存总量197916 free — 空闲内存总量1099448 cached — 缓存的总量
  5. 第五行,swap交换分区信息,具体信息说明如下:998396 total — 交换区总量989936 free — 空闲交换区总量8460 used — 使用的交换区总量1044136 cached — 缓冲的交换区总量

1.7 free命令有哪些选项?

参考回答

Linux free命令用于显示内存状态

free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。

参数如下:

-b  以Byte为单位显示内存使用情况。 -k  以KB为单位显示内存使用情况。 -m  以MB为单位显示内存使用情况。 -h  以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。单位有:         B = bytes         K = kilos         M = megas         G = gigas         T = teras -o  不显示缓冲区调节列。 -s<间隔秒数>  持续观察内存使用状况。 -t  显示内存总和列。 -V  显示版本信息。

答案解析

实例:显示内存使用情况

# free //显示内存使用信息 total used free shared buffers cached Mem: 254772 184568 70204 0 5692 89892 -/+ buffers/cache: 88984 165788 Swap: 524280 65116 459164

1.8 Linux中压缩文件的命令是什么?

参考回答

Linux中压缩文件与解压文件的命令有:tar命令、gz命令、bz2命令、compress命令、zip命令、unzip命令

答案解析

  1. tar 命令详解Linux tar(英文全拼:tape archive )命令用于备份文件。tar 是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。//命令格式: tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-b <区块数目>][-C <目的目录>][-f <备份文件>][-F <Script文件>][-K <文件>][-L <媒体容量>][-N <日期时间>][-T <范本文件>][-V <卷册名称>][-X <范本文件>][-<设备编号><存储密度>][--after-date=<日期时间>][--atime-preserve][--backuup=<备份方式>][--checkpoint][--concatenate][--confirmation][--delete][--exclude=<范本样式>][--force-local][--group=<群组名称>][--help][--ignore-failed-read][--new-volume-script=<Script文件>][--newer-mtime][--no-recursion][--null][--numeric-owner][--owner=<用户名称>][--posix][--erve][--preserve-order][--preserve-permissions][--record-size=<区块数目>][--recursive-unlink][--remove-files][--rsh-command=<执行指令>][--same-owner][--suffix=<备份字尾字符串>][--totals][--use-compress-program=<执行指令>][--version][--volno-file=<编号文件>][文件或目录...]      //常用参数: //必要参数有如下: -A 新增压缩文件到已存在的压缩 -c 建立新的压缩文件 -d 记录文件的差别 -r 添加文件到已经压缩的文件 -u 添加改变了和现有的文件到已经存在的压缩文件 -x 从压缩的文件中提取文件 -t 显示压缩文件的内容 -z 支持gzip解压文件 -j 支持bzip2解压文件 -Z 支持compress解压文件 -v 显示操作过程 -l 文件系统边界设置 -k 保留原有文件不覆盖 -m 保留文件不被覆盖 -W 确认压缩文件的正确性      //实例 //1.压缩 tar -cf hhh.tar hhh       //打包 hhh 文件为 hhh.tar tar -jcf hhh.tar.bz2 hhh  //压缩打包 hhh 文件为 hhh.tar.bz2 tar -czf hhh.tar.gz hhh   //压缩 hhh 文件为 hhh.tar.gz tar -tzvf test.tar.gz     //列出压缩文件内容      //2.解压文件   tar -tzvf test.tar.gz  
  2. gz命令详解Linux gzip命令用于压缩文件。gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出".gz"的扩展名。//命令格式: gzip [-acdfhlLnNqrtvV][-S &lt;压缩字尾字符串&gt;][-&lt;压缩效率&gt;][--best/fast][文件...] 或 gzip [-acdfhlLnNqrtvV][-S &lt;压缩字尾字符串&gt;][-&lt;压缩效率&gt;][--best/fast][目录]      //常用参数: -a或--ascii  使用ASCII文字模式。 -c或--stdout或--to-stdout  把压缩后的文件输出到标准输出设备,不去更动原始文件。 -d或--decompress或----uncompress  解开压缩文件。 -f或--force  强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接。 -h或--help  在线帮助。 -l或--list  列出压缩文件的相关信息。 -L或--license  显示版本与版权信息。 -n或--no-name  压缩文件时,不保存原来的文件名称及时间戳记。 -N或--name  压缩文件时,保存原来的文件名称及时间戳记。 -q或--quiet  不显示警告信息。 -r或--recursive  递归处理,将指定目录下的所有文件及子目录一并处理。 -S<压缩字尾字符串>或----suffix<压缩字尾字符串>  更改压缩字尾字符串。 -t或--test  测试压缩文件是否正确无误。 -v或--verbose  显示指令执行过程。 -V或--version  显示版本信息。 -<压缩效率>  压缩效率是一个介于1-9的数值,预设值为"6",指定愈大的数值,压缩效率就会愈高。 --best  此参数的效果和指定"-9"参数相同。 --fast  此参数的效果和指定"-1"参数相同。      //实例 //1.压缩 gzip *            //压缩目录下的所有文件      //2.解压文件   gzip -dv *        //解压文件,并列出详细信息    
  3. bz2命令详解bzip2(选项)(参数):用于创建和管理.bz2格式的压缩包。//命令格式: bzip2 源文件       //压缩不保留源文件 bzip2 -k 源文件    //压缩保留源文件 //注意 bzip2 命令不能解压目录 //常用参数: -c 将压缩与解压缩的结果送到标准输出 -d 执行解压缩 -f 在压缩或解压缩时,若输出文件与现有文件名相同,预设不会覆盖现有文件;使用该选项,可覆盖文件 -k 在压缩或解压缩后,会删除原是文件;若要保留原是文件,使用该选项 -v 压缩或解压缩文件时,显示详细的信息 -z 强制执行压缩      //实例 //1.压缩 bzip2 源文件       //压缩不保留源文件 bzip2 -k 源文件    //压缩保留源文件      //2.解压文件   bzip2 -d 源文件   //解压缩 -k 保留压缩文件 bunzip2  源文件   //解压缩 -k 保留压缩文件      
  4. compress命令详解Linux compress命令是一个相当古老的 unix 档案压缩指令,压缩后的档案会加上一个 .Z 延伸档名以区别未压缩的档案,压缩后的档案可以以 uncompress 解压。若要将数个档案压成一个压缩档,必须先将档案 tar 起来再压缩。由于 gzip 可以产生更理想的压缩比例,一般人多已改用 gzip 为档案压缩工具。//命令格式: compress [-dfvcV] [-b maxbits] [file ...]   //常用参数:     -c 输出结果至标准输出设备(一般指荧幕) -f 强迫写入档案,若目的档已经存在,则会被覆盖 (force) -v 将程序执行的讯息印在荧幕上 (verbose) -b 设定共同字串数的上限,以位元计算,可以设定的值为 9 至 16 bits 。由于值越大,能使用的共同字串就 越多,压缩比例就越大,所以一般使用预设值 16 bits (bits) -d 将压缩档解压缩 -V 列出版本讯息          //实例 //1.压缩 compress -f source.dat   //将 source.dat 压缩成 source.dat.Z ,若 source.dat.Z 已经存在,内容则会被压缩档覆盖。          //2.解压文件   compress -d source.dat   //将 source.dat.Z 解压成 source.dat ,若档案已经存在,使用者按 y 以确定覆盖档案,若使用 -df 程序则会自动覆盖档案。  
  5. zip 命令详解//命令格式: zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目录>][-ll][-n <字尾字符串>][-t <日期时间>][-<压缩效率>][压缩文件][文件...][-i <范本样式>][-x <范本样式>]      //常用参数: -m 将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。 -o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同。 -q 不显示指令执行过程。 -r 递归处理,将指定目录下的所有文件和子目录一并处理。 -x<范本样式> 压缩时排除符合条件的文件。      //实例: //将 /home/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip: zip -q -r html.zip /home/html      //如果在我们在 /home/html 目录下,可以执行以下命令: zip -q -r html.zip *      //从压缩文件 cp.zip 中删除文件 a.c zip -dv cp.zip a.c
  6. unzip 命令详解Linux unzip命令用于解压缩zip文件unzip为.zip压缩文件的解压缩程序。//命令格式: unzip [-cflptuvz][-agCjLMnoqsVX][-P <密码>][.zip文件][文件][-d <目录>][-x <文件>] 或 unzip [-Z]      //常用参数:     -c 将解压缩的结果显示到屏幕上,并对字符做适当的转换。 -f 更新现有的文件。 -l 显示压缩文件内所包含的文件。 -p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。 -t 检查压缩文件是否正确。 -u 与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。 -v 执行是时显示详细的信息。 -z 仅显示压缩文件的备注文字。 -a 对文本文件进行必要的字符转换。 -b 不要对文本文件进行字符转换。 -C 压缩文件中的文件名称区分大小写。 -j 不处理压缩文件中原有的目录路径。 -L 将压缩文件中的全部文件名改为小写。 -M 将输出结果送到more程序处理。 -n 解压缩时不要覆盖原有的文件。 -o 不必先询问用户,unzip执行后覆盖原有文件。 -P<密码> 使用zip的密码选项。 -q 执行时不显示任何信息。 -s 将文件名中的空白字符转换为底线字符。 -V 保留VMS的文件版本信息。 -X 解压缩时同时回存文件原来的UID/GID。 [.zip文件] 指定.zip压缩文件。 [文件] 指定要处理.zip压缩文件中的哪些文件。 -d<目录> 指定文件解压缩后所要存储的目录。 -x<文件> 指定不要处理.zip压缩文件中的哪些文件。 -Z unzip -Z等于执行zipinfo指令。      //实例 unzip text.zip   //将压缩文件text.zip在指定目录/tmp下解压缩,如果已有相同的文件存在,要求unzip命令不覆盖原先的文件。     unzip -n text.zip -d /tmp  //查看压缩文件目录,但不解压。

1.9 Linux查询连接数的命令是什么?

参考回答

  1. netstat
  2. //示例 查看Web服务器(Nginx Apache)的并发请求数及其TCP连接状态: netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 解释: 返回结果示例:  LAST_ACK 5   (正在等待处理的请求数)  SYN_RECV 30  ESTABLISHED 1597 (正常数据传输状态)  FIN_WAIT1 51  FIN_WAIT2 504  TIME_WAIT 1057 (处理完毕,等待超时结束的请求数)    状态:描述  CLOSED:无连接是活动的或正在进行  LISTEN:服务器在等待进入呼叫  SYN_RECV:一个连接请求已经到达,等待确认  SYN_SENT:应用已经开始,打开一个连接  ESTABLISHED:正常数据传输状态  FIN_WAIT1:应用说它已经完成  FIN_WAIT2:另一边已同意释放  ITMED_WAIT:等待所有分组死掉  CLOSING:两边同时尝试关闭  TIME_WAIT:另一边已初始化一个释放  LAST_ACK:等待所有分组死掉

答案解析

无。

1.10 Linux中top命令有哪些参数?

参考回答

top命令。显示当前系统正在执行的进程的相关信息,包括进程 ID、内存占用率、CPU 占用率等

参数

-d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。  -p 通过指定监控进程ID来仅仅监控某个进程的状态。  -q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。  -S 指定累计模式  -s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。  -i 使top不显示任何闲置或者僵死进程。  -c 显示整个命令行而不只是显示命令名  

答案解析

前五行是当前系统情况整体的统计信息区。

  1. 第一行,任务队列信息,同 uptime 命令的执行结果,具体参数说明情况如下:00:12:54 — 当前系统时间up ?days, 4:49 — 系统已经运行了?天4小时49分钟(在这期间系统没有重启过)21users — 当前有1个用户登录系统load average: 0.06, 0.02, 0.00 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
  2. 第二行,Tasks — 任务(进程),具体信息说明如下:系统现在共有256个进程,其中处于运行中的有1个,177个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。
  3. 第三行,cpu状态信息,具体属性说明如下:0.2%us — 用户空间占用CPU的百分比。0.2% sy — 内核空间占用CPU的百分比。0.0% ni — 改变过优先级的进程占用CPU的百分比99.5% id — 空闲CPU百分比0.0% wa — IO等待占用CPU的百分比0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比0.0% si — 软中断(Software Interrupts)占用CPU的百分比
  4. 第四行,内存状态,具体信息如下:2017552 total — 物理内存总量720188 used — 使用中的内存总量197916 free — 空闲内存总量1099448 cached — 缓存的总量
  5. 第五行,swap交换分区信息,具体信息说明如下:998396 total — 交换区总量989936 free — 空闲交换区总量8460 used — 使用的交换区总量1044136 cached — 缓冲的交换区总量

1.11 Linux中,如何通过端口查进程,如何通过进程查端口?

参考回答

  1. linux下通过进程名查看其占用端口(1)先查看进程pidps -ef | grep 进程名 (2)通过pid查看占用端口netstat -nap | grep 进程pid
  2. linux通过端口查看进程netstat -nap | grep 端口号

1.12 请你说说ping命令?

参考回答

Linux ping命令用于检测主机。

执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。

答案解析

语法:

ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]

参数说明:

-d 使用Socket的SO_DEBUG功能。 -c<完成次数> 设置完成要求回应的次数。 -f 极限检测。 -i<间隔秒数> 指定收发信息的间隔时间。 -I<网络界面> 使用指定的网络接口送出数据包。 -l<前置载入> 设置在送出要求信息之前,先行发出的数据包。 -n 只输出数值。 -p<范本样式> 设置填满数据包的范本样式。 -q 不显示指令执行过程,开头和结尾的相关信息除外。 -r 忽略普通的Routing Table,直接将数据包送到远端主机上。 -R 记录路由过程。 -s<数据包大小> 设置数据包的大小。 -t<存活数值> 设置存活数值TTL的大小。 -v 详细显示指令的执行过程。

实例:

检测是否与主机连通 # ping www.w3cschool.cc //ping主机 PING aries.m.alikunlun.com (114.80.174.110) 56(84) bytes of data. 64 bytes from 114.80.174.110: icmp_seq=1 ttl=64 time=0.025 ms 64 bytes from 114.80.174.110: icmp_seq=2 ttl=64 time=0.036 ms 64 bytes from 114.80.174.110: icmp_seq=3 ttl=64 time=0.034 ms 64 bytes from 114.80.174.110: icmp_seq=4 ttl=64 time=0.034 ms 64 bytes from 114.80.174.110: icmp_seq=5 ttl=64 time=0.028 ms 64 bytes from 114.80.174.110: icmp_seq=6 ttl=64 time=0.028 ms 64 bytes from 114.80.174.110: icmp_seq=7 ttl=64 time=0.034 ms 64 bytes from 114.80.174.110: icmp_seq=8 ttl=64 time=0.034 ms 64 bytes from 114.80.174.110: icmp_seq=9 ttl=64 time=0.036 ms 64 bytes from 114.80.174.110: icmp_seq=10 ttl=64 time=0.041 ms --- aries.m.alikunlun.com ping statistics --- 10 packets transmitted, 30 received, 0% packet loss, time 29246ms rtt min/avg/max/mdev = 0.021/0.035/0.078/0.011 ms //需要手动终止Ctrl+C 指定接收包的次数 # ping -c 2 www.w3cschool.cc PING aries.m.alikunlun.com (114.80.174.120) 56(84) bytes of data. 64 bytes from 114.80.174.120: icmp_seq=1 ttl=54 time=6.18 ms 64 bytes from 114.80.174.120: icmp_seq=2 ttl=54 time=15.4 ms --- aries.m.alikunlun.com ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1016ms rtt min/avg/max/mdev = 6.185/10.824/15.464/4.640 ms //收到两次包后,自动退出 多参数使用 # ping -i 3 -s 1024 -t 255 g.cn //ping主机 PING g.cn (203.208.37.104) 1024(1052) bytes of data. 1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=0 ttl=243 time=62.5 ms 1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=1 ttl=243 time=63.9 ms 1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=2 ttl=243 time=61.9 ms --- g.cn ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 6001ms rtt min/avg/max/mdev = 61.959/62.843/63.984/0.894 ms, pipe 2 [root@linux ~]#  //-i 3 发送周期为 3秒 -s 设置发送包的大小 -t 设置TTL值为 255

1.13 什么是协程?

参考回答

协程:协程是微线程,在子程序内部执行,可在子程序内部中断,转而执行别的子程序,在适当的时候再返回来接着执行。

答案解析

  1. 线程与协程的区别:(1)协程执行效率极高。协程直接操作栈基本没有内核切换的开销,所以上下文的切换非常快,切换开销比线程更小。(2)协程不需要多线程的锁机制,因为多个协程从属于一个线程,不存在同时写变量冲突,效率比线程高。(3)一个线程可以有多个协程。
  2. 协程的优势:(1)协程调用跟切换比线程效率高:协程执行效率极高。协程不需要多线程的锁机制,可以不加锁的访问全局变量,所以上下文的切换非常快。(2)协程占用内存少:执行协程只需要极少的栈内存(大概是4~5KB),而默认情况下,线程栈的大小为1MB。(3)切换开销更少:协程直接操作栈基本没有内核切换的开销,所以切换开销比线程少。

1.14 为什么协程比线程切换的开销小?

参考回答

(1)协程执行效率极高。协程直接操作栈基本没有内核切换的开销,所以上下文的切换非常快,切换开销比线程更小。

(2)协程不需要多线程的锁机制,因为多个协程从属于一个线程,不存在同时写变量冲突,效率比线程高。避免了加锁解锁的开销。

1.15 线程和进程的区别?

参考回答

(1)一个线程从属于一个进程;一个进程可以包含多个线程。

(2)一个线程挂掉,对应的进程挂掉;一个进程挂掉,不会影响其他进程。

(3)进程是系统资源调度的最小单位;线程CPU调度的最小单位。

(4)进程系统开销显著大于线程开销;线程需要的系统资源更少。

(5)进程在执行时拥有独立的内存单元,多个线程共享进程的内存,如代码段、数据段、扩展段;但每个线程拥有自己的栈段和寄存器组。

(6)进程切换时需要刷新TLB并获取新的地址空间,然后切换硬件上下文和内核栈,线程切换时只需要切换硬件上下文和内核栈。

(7)通信方式不一样。

(8)进程适应于多核、多机分布;线程适用于多核

相关文章
|
6月前
|
存储 Unix 程序员
面试题:Ctrl + C在不同操作系统下的应用
字节跳动面试题:Ctrl + C在不同操作系统下的应用
127 1
|
5月前
|
存储 调度 C++
【操作系统】进程与线程的区别及总结(非常非常重要,面试必考题,其它文章可以不看,但这篇文章最后的总结你必须要看,满满的全是干货......)
【操作系统】进程与线程的区别及总结(非常非常重要,面试必考题,其它文章可以不看,但这篇文章最后的总结你必须要看,满满的全是干货......)
122 1
|
3月前
|
缓存 网络协议 算法
这些年背过的面试题——网络和操作系统基础篇
本文是技术人面试系列网络和操作系统基础篇,面试中关于网络和操作系统基础都需要了解哪些内容?一文带你详细了解,欢迎收藏!
|
3月前
|
消息中间件 存储 缓存
面试准备-操作系统
面试准备-操作系统
|
6月前
|
消息中间件 调度 C++
C/C++工程师面试题(操作系统篇)
C/C++工程师面试题(操作系统篇)
68 0
|
6月前
|
算法 安全 调度
[操作系统] 面试宝典之~死锁连环系列
[操作系统] 面试宝典之~死锁连环系列
|
6月前
|
存储 Linux 调度
[操作系统]秋招面试问到进程扩展知识!!!面试官喜欢的答案
[操作系统]秋招面试问到进程扩展知识!!!面试官喜欢的答案
|
缓存 算法 关系型数据库
面试官:你知道MySQL和Linux操作系统是如何改进LRU算法的吗?
上周群里看到有位小伙伴面试时,被问到这两个问题: 咋一看,以为是在问操作系统的问题,其实这两个题目都是在问如何改进 LRU 算法。 因为传统的 LRU 算法存在这两个问题: 「预读失效」导致缓存命中率下降(对应第一个问题) 「缓存污染」导致缓存命中率下降(对应第二个问题) Redis 的缓存淘汰算法则是通过实现 LFU 算法来避免「缓存污染」而导致缓存命中率下降的问题(Redis 没有预读机制)。 MySQL 和 Linux 操作系统是通过改进 LRU 算法来避免「预读失效和缓存污染」而导致缓存命中率下降的问题。 这次,就重点讲讲 MySQL 和 Linux 操作系统是如何改进 L
|
存储 算法 Linux
操作系统面试高频考点
操作系统面试高频考点
|
SQL 监控 安全
Linux操作系统面试题2
Linux操作系统面试题2
143 0