当前位置: 首页 > news >正文

宜昌外贸网站建设优化推广网络项目资源网

宜昌外贸网站建设优化推广,网络项目资源网,甘肃省住房和城乡建设部网站首页,十堰网站整站优化公司目录 一、进程的含义 二、进程和程序的区别 三、进程的作用 四、进程的状态 五、进程的调度与上下文切换 六、查询进程相关命令 七、fork()函数 八、getpid()和getppid()函数 九、面试题解析: 十、应用场合及测试 一、进程的含义 进程指正在运行的程序&a…

目录

一、进程的含义

二、进程和程序的区别

三、进程的作用

四、进程的状态

五、进程的调度与上下文切换

六、查询进程相关命令

七、fork()函数

八、getpid()和getppid()函数

九、面试题解析:

十、应用场合及测试


一、进程的含义

进程指正在运行的程序,它是一个程序执行的过程,会分配内存资源和接受 CPU 的调度。系统通过 PCB 块(进程控制块,如 task_struct 结构体)来控制进程,其中包含 PID(进程标识符)、cwd(当前工作路径)、用户 ID、组 ID 等信息,还记录了进程打开的文件列表、信号相关设置以及进程资源的上限等。

二、进程和程序的区别

1. 程序是静态的,存储在硬盘中代码和数据的集合;进程是动态的,是程序执行的过程,包括进程的创建、调度、消亡。
◦ 例如,一个编译好的可执行文件就是程序,而运行这个可执行文件产生的活动就是进程。
2. 程序是永存的,进程是暂时的。
◦ 程序可以长期保存在存储介质中,而进程会随着任务的完成或异常终止而结束。
3. 进程有程序状态的变化,程序没有。
◦ 进程在运行过程中其状态会在就绪、执行、阻塞等之间切换,而程序不存在这种状态变化。
4. 进程可以并发,程序无并发。
◦ 多个进程可以在同一时间内同时执行不同的任务,而程序本身不具备并发执行的能力。
5. 进程与进程会存在竞争计算机的资源,一个程序可以运行多次,变成多个进程,一个进程也可以运行一个或多个程序。

三、进程的作用

进程的主要作用是实现多任务,提高系统效率。通过并发(同一时刻同时完成多个任务)和并行(真正同时执行多个任务)来充分利用系统资源,提高系统的处理能力。
例如,在一个多任务操作系统中,用户可以同时运行浏览器浏览网页、听音乐和处理文档,这就是进程并发的体现。

四、进程的状态

基本操作系统中,进程有 3 个状态:就绪态、执行态、阻塞态。
在 Linux 中,进程的状态有运行态、睡眠态、僵死状态(特有)、暂停状态。

五、进程的调度与上下文切换

内核的主要功能之一是完成进程调度,涉及硬件、BIOS、IO、文件系统、驱动等。调度算法包括 RR(轮转调度)、FIFO(先进先出调度)等。
进程调度在宏观上看起来是并行的,但在微观上是串行的。

六、查询进程相关命令

1. ps aux:不会动态刷新,可查看进程的相关信息,包括进程状态(如就绪态、运行态用 R 表示,可唤醒等待态用 S 表示,不可唤醒等待态用 D 表示,停止态用 T 表示,僵尸态用 Z 表示等)。
2. top:类似任务管理器,可以动态刷新,能根据 CPU 占用率查看进程相关信息。
3. kill和killall:用于发送信号来控制进程。
◦ 例如,kill -2 PID发送特定信号给指定 PID 的进程,killall -9 进程名发送信号给指定进程名对应的所有进程。

七、fork()函数

1.fork()是一个系统调用函数,一次调用会在父进程和子进程中分别返回。子进程和父进程的执行顺序不确定,且变量不共享。子进程复制父进程的 0 到 3G 空间和父进程内核中的 PCB,但进程 ID 号不同。
2. 功能是从当前进程克隆一个新进程,新进程称为子进程,原有进程为父进程。子进程是父进程的完全拷贝,从 fork 函数之后开始执行,与父进程具有相同的代码逻辑。
3. 返回值为 int 类型:在父进程中成功返回子进程的 pid 号(大于 0),失败返回 -1;在子进程中成功返回值是 0,失败无返回

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>// 定义全局变量 a 并初始化为 20
int a = 20;int main(int argc, char *argv[])
{// 调用 fork 函数创建子进程,返回值存储在 ret 中pid_t ret = fork();if (ret > 0){//father(父进程执行的代码块)sleep(3);// 输出父进程中的变量 a 的值、父进程的 PID 和父进程的父进程 PID(即启动这个程序的终端进程 ID)printf("father is %d   pid %d,ppid:%d  \n", a, getpid(), getppid());}else if (0 == ret){//child(子进程执行的代码块)// 输出子进程中变量 a 的初始值printf("child a is %d\n", a);a += 10;// 输出子进程中变量 a 自增后的结果、子进程的 PID 和子进程的父进程 PID(即主进程的 PID)printf("child a is %d pid:%d ppid:%d\n", a, getpid(), getppid());}else{perror("fork error\n");return 1;}// 输出当前进程中的变量 a 的值和当前进程的 PIDprintf("a is %d pid:%d\n", a, getpid());return 0;
}

八、getpid()和getppid()函数

1. getpid()函数用于获得当前进程的 ID 号码,无参数,返回值为进程的 pid。
2. getppid()函数用于获得当前进程的父进程 pid 号,无参数,返回值为父进程 id 号。目前没有直接获取子进程号的函数。

九、面试题解析:

1、一次fork生成几个进程?他们之间的关系是什么样的?

一次 fork 生成两个进程,即父进程和子进程,它们是父子关系。

2、如果两次fork同时前后执行,会生成几个进程?他们之间的关系如何表示,有多少个子进程,有没有孙进程?

两次 fork 同时前后执行会生成四个进程。第一次 fork 产生父子两个进程,这两个进程再分别进行第二次 fork,又各自产生一个子进程,所以一共四个进程。关系可以表示为:最初的进程是根节点,第一次 fork 产生的父子进程是父子关系,第二次 fork 产生的进程对于第一次 fork 产生的父进程来说是父子关系,对于第一次 fork 产生的子进程来说也是父子关系,所以存在孙进程。

十、应用场合及测试

1. 应用场合:
◦ 一个进程希望复制自己,使父子进程同时执行相同的代码段,在网络服务中比较多见。
◦ 一个进程需要执行一个不同的程序时,可以使用 fork + exec 组合。
2. 使用变量测试可以验证父子进程位于不同的地址空间,文件的写入测试也可以进一步验证父子进程的独立性。
例如,在变量测试中,父进程和子进程分别修改同一个变量,不会相互影响,说明它们位于不同的地址空间。在文件写入测试中,父子进程同时向同一个文件写入内容,可以观察到写入的顺序和内容的独立性,进一步证明它们的独立性。

http://www.zhongyajixie.com/news/15487.html

相关文章:

  • 佛山网站建设哪里有如何对seo进行优化
  • 如何设计网站模板百度竞价排名怎么靠前
  • qq空间个人网站巨量算数数据分析入口
  • 一起作做业网站seo免费课程
  • 用vs2010里的vb做网站刷关键词排名seo
  • 在哪里推广网站一网信息一个简单便捷的新闻网站
  • 如何增加网站外链seo1现在怎么看不了
  • 中国三大搜索引擎抖音seo优化排名
  • 网页统计代码大全深圳seo招聘
  • 学校网站建设的验收单软文自助发布平台系统
  • 香港服务器做收费网站要付税吗最近的时事新闻
  • asp.net获取网站的域名网络推广优化培训
  • 哈尔滨做网站的百度推广一年要多少钱
  • 大连建设工程集团有限公司快速排名优化推广排名
  • 做论坛网站前段用什么框架好点做微商怎么找客源加人
  • 网站图片延时加载网址大全百度
  • 网站建设这个行业如何西安seo培训机构
  • 用asp.net做简易网站seo 优化 工具
  • 织梦网站建设个人网站搭建
  • WordPress站内跳转设置建立网站平台需要多少钱
  • 适合中考做的微机题网站建站
  • thinkphp做的网站源码百度软件应用中心下载
  • 乐山 网站建设有链接的网站
  • 做响应式网站的菜单太原关键词优化服务
  • 网站源码怎么使用友情链接怎么连
  • 行业导航类网站模板seo优化排名公司
  • 检察机关门户网站建设网络推广公司有多少家
  • 快盘做网站服务器网络广告营销策略
  • 曲阜网站设计合肥网站推广助理
  • 官网做有下拉列表的网站的图片短视频代运营费用明细