Linux常见面试题

x33g5p2x  于2021-12-06 转载在 Linux  
字(2.3k)|赞(0)|评价(0)|浏览(533)

1. Linux查看进程的2种方法

ps aux

ps命令用于报告当前系统的进程状态。

a:显示当前终端下的所有进程信息,包括其他用户的进程。
u:使用以用户为主的格式输出进程信息。
x:显示当前用户在所有终端下的进程。

pstree -aup

可以带上|grep 查询特定进程。例如 pstree -aup | grep php

2. 软链接和硬链接

  • 硬链接
    由于 Linux 下的文件是通过索引节点(inode)来识别文件,硬链接可以认为是一个指针,指向文件索引节点的指针,系统并不为它重新分配 inode 。每添加一个硬链接,文件的链接数就加 1 。
    不足:1)不可以在不同文件系统的文件间建立链接;2)只有超级用户才可以为目录创建硬链接。
  • 软链接
    软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
    不足:因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。
  • 硬链接就是在目录下创建一个条目,记录着文件名与inode 编号,这个inode 就是源文件的inode 。删除任意一个条目,文件还是存在,只要引用数量不为0。但是硬链接有限制,它不能跨越文件系统,普通用户不能对目录进行链接。
  • 软链接文件保存着源文件所在的绝对路径,在读取时会定位到源文件上,可以理解为Windows的快捷方式。当源文件被删除了,链接文件就打不开了。因为记录的是路径,所以可以为目录建立符号链接。

3. Linux系统的开机启动过程

  1. 主机加电自检,加载 BIOS 硬件信息。
  2. 读取 MBR 的引导文件(GRUB、LILO)。
  3. 引导 Linux 内核。
  4. 运行第一个进程 init (进程号永远为 1 )。
  5. 进入相应的运行级别。
  6. 运行终端,输入用户名和密码。

BIOS(Basic Input/Output System),基本输入输出系统,该系统存储于主板的ROM芯片上,计算机在开机时,会最先读取该系统,然后会有一个加电自检过程,这个过程其实就是检查CPU和内存,计算机最基本的组成单元(控制器、运算器和存储器),还会检查其他硬件,若没有异常就开始加载BIOS程序到内存当中。

什么是LILO?
LILO是Linux的引导加载程序。它主要用于将Linux操作系统加载到主内存中,以便它可以开始运行。

4. 什么是中断?

程序运行过程中,系统外部、系统内部或者现行程序本身若出现紧急事件,处理器立即中止现行程序的运行,自动转入相应的处理程序(中断服务程序),待处理完后,再返回原来的程序运行,这整个过程称为程序中断。

CPU要做的事情:

  1. 改变工作模式至中断模式
  2. 保存现场
  3. 分析中断原因,跳到中断起始地址处理中断
  4. 返回到原来模式
  5. 恢复现场继续执行原来的程序。

5. GDB

要调试C/C++的程序,首先在编译时,要使用gdb调试程序,在使用gcc编译源代码时必须加上 “-g” 参数。保留调试信息,否则不能使用GDB进行调试。

设置断点:

  • 通过行号设置断点
# 程序运行到第9行的时候会断住。
break [行号]
b 9  #break 可简写为b
或者  
b test.c:9
  • 根据函数名设置断点
    同样可以将断点设置在函数处:
# 程序在调用到printNum函数的时候会断住。
 b printNum
  • 根据条件设置断点
# 当在b等于0时,程序将会在第23行断住。
break test.c:23 if b==0
  • 查看已经设置的断点
info breakpoints
  • 设置临时断点
    假设某处的断点只想生效一次,那么可以设置临时断点,这样断点后面就不复存在了:
tbreak test.c:10  #在第10行设置临时断点
  • 断点清除
    断点清除主要用到clear和delete命令。常见使用如下:
clear   #删除当前行所有breakpoints
clear function  #删除函数名为function处的断点
clear filename:function #删除文件filename中函数function处的断点
clear lineNum #删除行号为lineNum处的断点
clear f:lename:lineNum #删除文件filename中行号为lineNum处的断点
delete  #删除所有breakpoints,watchpoints和catchpoints
delete bnum #删除断点号为bnum的断点

6. Linux下面创建线程

int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict_attr, void*(*start_rtn)(void*), void *restrict arg);
  • 返回值
    若成功则返回0,否则返回出错编号
  • 参数
    第一个参数为指向线程标识符的指针。
    第二个参数用来设置线程属性。
    第三个参数是线程运行函数的地址。
    最后一个参数是运行函数的参数。
  • 注意
    在编译时注意加上 -lpthread 参数,以调用静态链接库。因为pthread并非Linux系统的默认库。

7. 什么是交叉编译

在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。
为什么要使用交叉编译 有时是因为目标平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;有时是因为目标平台上的资源贫乏,无法运行我们所需要编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。

相关文章