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 需要环境变量的path每一个路径,只要文件名,不需要行路径
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()