练习四

本文深入解析Linux系统下的进程创建与管理,探讨fork函数的行为及其如何影响进程树的构建。同时,文章阐述了系统调用的概念,包括常见的文件操作调用如open、write、read、close和ioctl,以及如何利用nohup命令使进程在用户登出后继续运行。此外,还介绍了Linux可执行文件的ELF格式和Apache目录访问控制参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

习题1

不算 main 这个进程自身,到底创建了多少个进程啊?(19)

fork

1、A&&B||C

A为假,跳过B,判断C

A为真,判断B,若B为真,跳过C

​ 若B为假,判断C

2、fork()函数父进程返回子进程ID;子进程返回0

第一条语句新增1个

第二条语句新增4*2个

第三条语句,此时已有进程1+1+4*2个,所以新增10个

这样不好理解,我来:

fork()【1】

fork()【2】&&fork()【3】||fork()【4】

fork()【5】

fork1 :一个新进程

fork2为假,跳过fork3,判断fork4 (2)

fork2为真,判断fork3,若fork3为真,跳过fork4(2)

​ 若fork3为假,判断fork4 (1)

fork2-fork4:8个新进程

fork5:(2+2+1)*2=10,10个新进程

给fork标上序号

有以下图

fork

习题2

文件操作的唯一依据是?(文件句柄)

在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据。要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将文件句柄在内存中的地址和要拷贝的字节数传送给操作系统。当完成任务后,再通过调用系统函数来关闭该文件。

习题3

你尝试登出时收到一个错误消息,显示你还有任务未完成,你需要使用下面哪个命令?(kill PID-of-the-process)

kill pid让进程正常退出

kill %job number 直接杀掉进程

习题4

int main()
{
char *p = “hello,world”;
return 0;
}

p和"hello,world"存储在内存哪个区域?(栈,只读存储区)

(1)从静态存储区域分配:

内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在。速度快、不容易出错,因为有系统会善后。例如全局变量,static变量等。

(只读存储区)

(2)在上分配:

在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

(3)从上分配:

即动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由程序员决定,使用非常灵活。如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏,另外频繁地分配和释放不同大小的堆空间将会产生堆内碎块。

一个C、C++程序编译时内存分为5大存储区:堆区、栈区、全局区、文字常量区、程序代码区。

习题5

Linux的可执行文件开头的特征字符串是什么(ELF)

可移植可执行文件(Portable Executable,PE)是一种用于可执行、目标文件和动态链接库的文件格式,主要用于Windows,而使用于Linux和多数Unix系统中的是可执行与可链接格式(ELF),Mac OS中则主要使用Mach-O

习题6

apache目录访问控制的参数有(authname、authtype、authuserfile )

AuthName:验证窗口的名称

AuthType:验证的类型,这里定义的是Basic

AuthUserFile:验证所使用的帐号密码配置文件

Require:指定可以登录网页的用户

习题7

linux的系统调用是指(是用户进程调用内核功能的接口)

5个系统调用∶open,write,read,close,ioctl

所谓系统调用,就是内核提供的、功能十分强大的一系列的函数。这些系统调用是在内核中实现的,再通过一定的方式把系统调用给用户,一般都通过门(gate)陷入(trap)实现。系统调用是用户程序和内核交互的接口。

习题8

在退出unix系统账户之后还需要继续运行某个进程,那么可用(nohup)

nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思

习题9

在Linux上,对于多进程,子进程继承了父进程的下列哪些?

(共享内存、信号掩码、已打开的文件描述符)

  • 子进程继承父进程
    • 用户号UIDs和用户组号GIDs
    • 环境Environment
    • 堆栈
    • 共享内存
    • 打开文件的描述符
    • 执行时关闭(Close-on-exec)标志
    • 信号(Signal)控制设定
    • 进程组号
    • 当前工作目录
    • 根目录
    • 文件方式创建屏蔽字
    • 资源限制
    • 控制终端
  • 子进程独有
    • 进程号PID
    • 不同的父进程号
    • 自己的文件描述符和目录流的拷贝
    • 子进程不继承父进程的进程正文(text),数据和其他锁定内存(memory locks)
    • 不继承异步输入和输出
  • 父进程和子进程拥有独立的地址空间和PID参数。
  • 子进程从父进程继承了用户号和用户组号,用户信息,目录信息,环境(表),打开的文件描述符,堆栈,(共享)内存等。
  • 经过fork()以后,父进程和子进程拥有相同内容的代码段、数据段和用户堆栈,就像父进程把自己克隆了一遍。事实上,父进程只复制了自己的PCB块。而代码段,数据段和用户堆栈内存空间并没有复制一份,而是与子进程共享。只有当子进程在运行中出现写操作时,才会产生中断,并为子进程分配内存空间。由于父进程的PCB和子进程的一样,所以在PCB中断中所记录的父进程占有的资源,也是与子进程共享使用的。这里的“共享”一词意味着“竞争

享)内存等。

  • 经过fork()以后,父进程和子进程拥有相同内容的代码段、数据段和用户堆栈,就像父进程把自己克隆了一遍。事实上,父进程只复制了自己的PCB块。而代码段,数据段和用户堆栈内存空间并没有复制一份,而是与子进程共享。只有当子进程在运行中出现写操作时,才会产生中断,并为子进程分配内存空间。由于父进程的PCB和子进程的一样,所以在PCB中断中所记录的父进程占有的资源,也是与子进程共享使用的。这里的“共享”一词意味着“竞争
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值