2021-09-25 文件目录和进程基础

在这里插入图片描述

1.进程环境----子进程继承父进程的那些东西

  • 缓冲区
  • 环境变量
  • 虚拟地址空间
  • 存储映像
  • 共享库
  • 进程表象
  • 附属组ID
  • 进程组ID
  • 会话ID
  • 控制终端
  • 设置用户ID标识和设置组ID标志
  • 当前工作目录
  • 根目录
  • 文件模式创建屏蔽字
  • 信号屏蔽和安排
  • 对任一打开文件描述符的执行时关闭标志
  • 链接的共享存储端
  • 资源限制

2.父进程和子进程之间的区别

  • fork的返回值不同
  • 进程ID不同
  • 两个进程的父进程不同
  • 子进程tms_utime、tms_stime、tms_cuttime和tms_ustime的值设置为0
  • 子进程不继承父进程设置的文件所
  • 子进程的未处理闹钟被清除
  • 子进程的未处理信号集设置为空集

3.fork的两种用法

(1)网络模型中:一个父进程希望复制自己,使父进程和子进程同时执行不同的代码段

(2)类似shell应用:一个进程要执行一个不同的程序,子进程调用exec

4.进程启动和终止的方式

(1)启动方式

  • 内核有C启动历程,子进程通过exec用C启动历程替换子进程
  • 启动历程调用main函数使得整个历程启动起来

(2)终止方式

​ 5种为正常终止

  • 从main返回;

  • 调用exit:

  • 调用__exit或_Exit:

  • 最后一个线程从其启动例程返回:

  • 从最后一个线程调用pthread_exit 。

    异常终止有3种方式,它们是:

  • 调用abort ;

  • 接到一个信号;

  • 最后一个线程对取消请求做出响应。

5.main return和exit和_exit进程终止有什么区别

  • return是返回函数值并退出函数
  • exit结束之前会清理I/O缓存和终止处理程序
  • _exit直接终止程序

6.c的存储空间布局是如何划分

(1)栈空间

​ 用于存放局部变量,变量未初始化时为随机值

(2)堆空间

​ 用户动态分配和释放存储孔空间

(3)数据段

​ 包含了已初始化的全局变量和静态局部变量

(4)bss段

​ 存放未初始化的全局变量和静态局部变量,在程序开始之前,内核将此段中的数据初始化为0或空指针

7.父进程想到等待子进程完成在继续运行需要怎么做

用wait和waitpid

waitpid的第一个参数作用

pid<-1等待组ID等于pid绝对值的任一子进程
pid==-1等待任一子进程
pid==0等待组ID等于调用进程组ID的任一子进程
pid>0等待组ID等于与pid相等的子进程

8.进程替换的接口有几种,有哪些区别

六种 execl execv execlp execvp execle execve

execl execlp execle 需要单独的参数,以空指针结尾

execv execvp execve 需要构造一个指向个参数的指针数组

execlp execvp 只要文件名,不需要行路径

9.标准I/O和文件I/O有什么区别

  • 标准I/O有缓存区 文件I/O没有缓存区
  • 标准I/O是库 文件I/O是系统调用
  • 标准I/O可以移植性好 文件I/O速度快
  • 标准I/O通过文件流标志打开的文件 文件I/O通过文件描述符标志打开的文件

10.缓存区的类型和刷新缓存区的方法

  • ​ 缓冲区:暂存空间,大多数情况下,缓冲区的存在是件好事,作用合并系统调用
  • ​ 行缓冲:stdout,换行时,满了时,强制刷新
  • ​ 全缓冲:默认,(只要不是终端设备,全采用全缓冲模式)满了时,强制刷新
  • ​ 无缓冲:stderr需要立即输出

11.文件的元信息和文件类型

(1)元信息

  • 文件的类型和权限
  • 用户ID
  • 组ID
  • 文件字节数
  • 文件块大小
  • 最后一次访问时间
  • 最后一次修改时间
  • 最后一次改变时间(属性)
  • 文件的设备编号

(2)文件类型

  • - 普通文件regular file
  • d 目录文件dirctory
  • b 块设备文件block device
  • c 字符设备文件character device
  • s 套接字文件socket
  • p 管道文件 pipe
  • l 链接文件link

12.如何得到文件拥有者的名字

​ 通过stat函数得到uid,getpwuid读出/etc/passwd每一个字段,其中包括用户名

13.如何读目录

​ opendir()得到一个目录流,通过目录流读取目录项中的每一个,通过readdir()得到目录项,多次调用时会偏移到每一个元素,当读到最后一个目录流,readdir()返回NULL,之后再closedir()

14.什么是守护进程

  • pid和ppid和pgid相同
  • 不占用控制终端

15.守护进程的编程规则

1.调用umask将文件模式创建屏蔽字设置为一个已知值(通常是0)。

2.调用fork,然后使父进程exit。

3.要用一个非组长进程,调用setsid创建一个会话

4.将当前工作目录更改为根目录,chdir("/");

5.关闭不需要的文件描述符

6.打开/dev/null使其具有文件描述符0,1,2,使其不会产生效果

16.vfork和fork的差别

(1)fork :子进程拷贝父进程的数据段,代码段

​ vfork:子进程与父进程共享数据段

(2)fork父子进程的执行次序不确定

​ vfork保证子进程先运行

17.匿名管道的特征

  • 有空间大小,只能进行单向通信;

  • 只适用于有血缘关系之间的进程;

  • 不能用lseek来定位文件偏移量

  • 必须有读写双方

  • 当进程读到一个空管道时会处于阻塞态,直到数据到来。没有写端,返回eof表示读完。

  • 当进程写到一个满管道时会处于阻塞态,直到数据读走。没有读端只有写端,会产生信号结束进程

18.守护进程出错怎么记录

书写日志 openlog syslog closelog

19.会话,进程组,进程的关系

会话中有一个或多个进程组

一个进程组中有一个或多个进程

getsid()获得会话id

getpgid()获得进程组id

getpid()获得进程id

20.标准信号默认行为

  • term:终止进程
  • ign:忽略信号
  • core:终止进程并产生dump文件 看不到文件是因为资源限制
  • stop:暂停进程
  • cont:继续进程

21.如何产生信号

(1)在终端按下组合键

Ctrl-C产生SIGINT信号
Ctrl-\产生SIGQUIT信号
Ctrl-Z产生SIGTSTP信号

(2)程序异常产生信号

(3)调用kill()或raise()

kill的第一个参数

pid<0发送信号给pid绝对值所对应的进程组
pid==-1发送给进程有权限发送的系统中所有进程
pid==0发送信号给与发送进程属于同一个进程组的所有进程
pid>0发送信号给指定进程

21.什么是信号集

用某个数据类型去描述多种信号,这种数据类型被称为信号集

与信号集有关的函数

  • sigemtpyset():把信号集中的所有信号都清0
  • sigaddset():向信号集中添加信号
  • sigdelset(s):在信号集中删除信号
  • sigprocmask():设定对信号屏蔽集内的信号的处理方式(阻塞或不阻塞)
  • sigappding:原子化设置信号集状态

22.标准信号有什么特点

  • 能打断阻塞的系统调用
  • 有默认行为
  • 用位图显示信号结构
  • 信号处理函数不能用longjmp函数跳转
  • 信号处理函数用可重入函数
  • 相应过程是嵌套的

23.为什么不能用longjmp函数?

信号处理函数结束后要将mask置为1

24.如何忽略掉一个信号的?

将mask置为0

25.标准信号为什么会丢失?

显示信号的结构时一个位图 只能被置1一次

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RLC214

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值