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

甘肃省建设社厅网站nba交易最新消息

甘肃省建设社厅网站,nba交易最新消息,做企业网站前期需要准备什么,福州有哪些制作网站公司一、什么是进程 进程是一个运行起来的程序。 问题思考: ❓ 思考:程序是文件吗? 是!都读到这一章了,这种问题都无需思考!文件在磁盘哈。 本章一开始讲的冯诺依曼,磁盘就是外设,和内…

一、什么是进程

进程是一个运行起来的程序。

问题思考:

❓ 思考:程序是文件吗?

是!都读到这一章了,这种问题都无需思考!文件在磁盘哈。

本章一开始讲的冯诺依曼,磁盘就是外设,和内存与 CPU 打交道,它们之间有数据交互。

你的程序最后要被 CPU 运行,所以要运行起来必须先从磁盘外设加载到内存中。因此,当可执行文件被加载到内存中时,该程序就成为了一个进程。

操作系统里面可能同时存在大量的进程!

既然如此,那操作系统要不要将所以后的进程管理起来呢?

当然要,不要不就乱套了?当前想调用哪个进程,想让哪个进程占用 CPU 资源,

想执行哪个资源,数据一大你不管怎么行?所以我们刚才再次讲解了操作系统管理的概念:

被管理对象的管理本质上是对数据的管理。那么对进程的管理,本质上就是对进程数据的管理。

二、进程控制块(PCB)

/* Process Ctrl Block */
struct task_struct {进程的所有属性数据
};

在操作系统中,我们把描述进程的结构体称为 \textrm{PCB} (Process Ctrl Block) 。

在很多教材中,会把 \textrm{PCB} 称为 进程控制块

❓ 为什么每个进程都要有呢 (task_struct)?

💡 因为操作系统要管理我们的进程,想要管理就必须要 "先描述再组织" 。

❓ 为什么我们的 task_struct 每个进程都要有呢?

💡 因为这是为了管理进程而描述进程所设计的结构体类型,将来当有一个进程加载到内存时, 操作系统在内核中一定要为该进程创建 task_struct 结构体变量, 并且要将该变量链入到全局的链表当中。要删掉一个进程,实际上就是遍历所有的链表结点, 把对应进程的和代码都释放掉,这就叫对链表做管理。 最终你会发现,操作系统对进程的管理,最终变成了对链表的增删查改。什么是进程?目前为止我们可以总结成:进程 = 可执行程序 + 该进程对应的内核数据结构 task_struct 是一个非常大的结构体:

struct task_struct {volatile long state;void *stack;atomic_t usage;unsigned int flags;     unsigned int ptrace;unsigned long ptrace_message;siginfo_t *last_siginfo; int lock_depth;         #ifdef CONFIG_SMP
#ifdef __ARCH_WANT_UNLOCKED_CTXSWint oncpu;
#endif
#endif...
}

三、进程查看

我们先创建一个 mytest.c 文件,然后写上一个死循环,每隔1秒就打印一句话:

通过指令查看进程

任何一个进程都有自己的代码和数据,比如我们常见的 C语言 源文件,经过编译后生成的可执行程序中,就包含着二进制代码和其创建修改的时间、所处位置信息

当可执行程序 myprogress 运行时,各种数据就会被描述,生成相应的进程控制块。

可以用ps ajx指令来查看进程块包含的信息

Linux中的PCB是task_struct,程序会被描述生成相应的 task_struct装载至内存中。

用命令ps ajx | head-1可以查看第一行的信息。

用管道组合一下就可以通过指令来查看正在运行的进程信息:

$ ps ajx | head -1 && ps ajx | grep 进程名 | grep -v grep

grep -v grep命令的意思是过滤掉自身的这一条命令。

我们可以通过函数来主动查看进程的PID。

获取pid的函数——getpid()

#include<stdio.h>
#include<unistd.h>  //Linux中睡眠函数的头文件
#include<sys/types.h>
​
int main()
{int sec = 0;while(1){printf("这是一个进程,已经运行了%d秒 当前进程的PID为:%zu\n", sec, getpid());sleep(1); //单位是秒,睡眠一秒sec++;}return 0;
}
​

可以看出他们的PID是一样的。

注: 当程序重新运行后,会生成新的 PID

因为查看进程的指令太长了,所以我们可以结合前面学的自动化构建工具 make ,编写一个 Makefile 文件,文件内容如下所示:

top指令

top

这个指令之前有介绍过,相当于Windows中的 ctrl+alt+del 调出任务管理器一样,top 指令能直接调起 Linux 中的任务管理器,显然,任务管理器中包含有进程相关信息

通过proc目录查看进程信息

$ /proc/

这些数字所代表的就是PID。

杀进程

我们再来回忆一下我们是如何杀掉一个进程的…… \textrm{ctrl + c}

这是我们之前讲的,在 Linux 命令行中的热键,遇到问题解决不了可以用它来中止。

所谓的 \textrm{ctrl + c} 就是用来杀进程的。除此之外,你也可以选择在另一个终端中使用 kill 命令:

$ kill -9 [pid]   # 给这个进程发送9号信号

当前你只需要知道可以通过 kill -9 命令杀掉进程就行了,至于这个 9 号信号,我们会放在后面的信号章节去讲!

比如我们现在想杀掉刚才运行的, 打出进程 \textrm{pid} 的 mytest 进程,其 \textrm{pid} 为 22160:

父进程

进程间存在 父子关系

比如在当前 bash 分支下运行程序,那么程序的 父进程 就是当前 bash 分支

其中,PID 是当前进程的ID,PPID 就是当前进程所属 父进程 的ID 我们一样可以通过函数来查看 父进程 的ID值

//函数:获取当前进程PPID值
#include<unistd.h>
#include<sys/types.h>
​
pid_t getppid(void);    //用法跟上面的函数完全一样
​

使用fork()创建子进程

写上如下代码:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>int main(void) {pid_t id = fork();printf("Hello, World!\n");sleep(1);
}

运行后发现

❓ 思考:

  • 同一个 id 值,使用打印,没有修改,却打印出来了不同的值?为什么?这合理吗?

  • fork 如何做到会有不同的返回值?

再看看如下代码

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>int main(void) {pid_t id = fork();/* id:  0 子进程, >0 父进程 */if (id == 0) {// childwhile (1) {printf("我是子进程,我的pid: %d,我的父进程是 %d\n", getpid(), getppid());sleep(1);}} else {// parentwhile (1) {printf("我是父进程,我的pid: %d,我的父进程是 %d\n", getpid(), getppid());sleep(1);}}
}

我们发现,这两块代码是可以同时执行的。

原因:fork 之后,父进程和子进程会共享代码,一般都会执行后续的代码。这也是为什么刚才的 printf 会打印两次的原因。fork 之后,父进程和子进程返回值不同,所以可以通过不同的返回值去判断,让父子执行不同的代码块。

fork函数工作原理:

fork 创建子进程时,会新建一个属于 子进程 的 PCB ,然后把 父进程 PCB 的大部分数据拷贝过来使用,两者共享一份代码和数据 各进程间是相互独立的,包括父子进程。 这句话的含义是当我们销毁父进程 后,它所创建的子进程并不会跟着被销毁,而是变成一个 孤儿进程。

最后,return 是代码吗?是的!所以当我们走到 return 时父进程有了,子进程也已经在运行队列了,fork 后代码共享,父子进程当然会执行后续被共享的 return 代码。因此,父进程执行一次 return,子进程执行一次 return,最后就是两个返回值了。


文章转载自:
http://haploidic.pwmm.cn
http://southampton.pwmm.cn
http://absurdity.pwmm.cn
http://evictor.pwmm.cn
http://gangrenous.pwmm.cn
http://headrace.pwmm.cn
http://lallation.pwmm.cn
http://francophil.pwmm.cn
http://strathclyde.pwmm.cn
http://autocatalytic.pwmm.cn
http://scavenger.pwmm.cn
http://epimysium.pwmm.cn
http://catamountain.pwmm.cn
http://scythian.pwmm.cn
http://culicine.pwmm.cn
http://earthing.pwmm.cn
http://mephitic.pwmm.cn
http://sapan.pwmm.cn
http://bushmanoid.pwmm.cn
http://seaware.pwmm.cn
http://tragicomedy.pwmm.cn
http://chairwoman.pwmm.cn
http://sthenic.pwmm.cn
http://alumni.pwmm.cn
http://camelot.pwmm.cn
http://resold.pwmm.cn
http://fungal.pwmm.cn
http://arthroplastic.pwmm.cn
http://pink.pwmm.cn
http://brucine.pwmm.cn
http://copt.pwmm.cn
http://parch.pwmm.cn
http://petalon.pwmm.cn
http://snap.pwmm.cn
http://riffleman.pwmm.cn
http://darby.pwmm.cn
http://repellent.pwmm.cn
http://redemptioner.pwmm.cn
http://rufous.pwmm.cn
http://nopalry.pwmm.cn
http://dissipated.pwmm.cn
http://inkstand.pwmm.cn
http://arcifinious.pwmm.cn
http://maura.pwmm.cn
http://proteolysis.pwmm.cn
http://exoatmosphere.pwmm.cn
http://sweeten.pwmm.cn
http://engaged.pwmm.cn
http://housecarl.pwmm.cn
http://mice.pwmm.cn
http://arpa.pwmm.cn
http://aminotransferase.pwmm.cn
http://uncredited.pwmm.cn
http://anticonvulsant.pwmm.cn
http://predella.pwmm.cn
http://qiana.pwmm.cn
http://saugh.pwmm.cn
http://isogamete.pwmm.cn
http://eeriness.pwmm.cn
http://legateship.pwmm.cn
http://vest.pwmm.cn
http://amnion.pwmm.cn
http://aspergillosis.pwmm.cn
http://abacist.pwmm.cn
http://etch.pwmm.cn
http://euronet.pwmm.cn
http://lymphopoietic.pwmm.cn
http://cubanologist.pwmm.cn
http://voluble.pwmm.cn
http://capri.pwmm.cn
http://incremate.pwmm.cn
http://igorot.pwmm.cn
http://murein.pwmm.cn
http://vigorous.pwmm.cn
http://noetics.pwmm.cn
http://towmond.pwmm.cn
http://bbe.pwmm.cn
http://groovy.pwmm.cn
http://doubled.pwmm.cn
http://pronation.pwmm.cn
http://teleosaurus.pwmm.cn
http://iodine.pwmm.cn
http://ampulla.pwmm.cn
http://astrionics.pwmm.cn
http://paridigitate.pwmm.cn
http://decrescendo.pwmm.cn
http://infusorial.pwmm.cn
http://rebatron.pwmm.cn
http://dratted.pwmm.cn
http://teletypist.pwmm.cn
http://lithification.pwmm.cn
http://bangui.pwmm.cn
http://pentobarbital.pwmm.cn
http://bilbo.pwmm.cn
http://tenko.pwmm.cn
http://profiteering.pwmm.cn
http://xenoglossia.pwmm.cn
http://eparch.pwmm.cn
http://falconet.pwmm.cn
http://flocky.pwmm.cn
http://www.dt0577.cn/news/91185.html

相关文章:

  • 镇江手机网站制作贵阳百度seo点击软件
  • 百度网站是用什么软件做的百度推广哪种效果好
  • wordpress 内嵌网页优化问题
  • wordpress面向开发南宁百度seo推广
  • 免费视频课程网站模板产品推广平台
  • 网站建设的7种流程图百度seo优化推广公司
  • 做的好看的网站系统清理优化工具
  • 三亚手机台app临沂seo推广外包
  • 电影院可以寄存东西吗站长工具seo综合查询关键词
  • 上海网站建设哪家专业百度的seo排名怎么刷
  • 中国临海建设规划局网站少女长尾关键词挖掘
  • 郑州网站建设知名公司南京百度关键字优化价格
  • 电器网站制作价格百度推广登录官网
  • wordpress内置了boot页面关键词优化
  • 建设网站作业北京seo公司网站
  • 购物网站大全分类推广文章
  • 网站设计与开发的基本步骤包括哪些?唐山seo排名外包
  • 网站开发属于无形资产吗什么是seo技术
  • 佛山网站建设网站制作公司国家高新技术企业认定
  • 网站群建设规划方案市场监督管理局电话
  • 给公司做网站要花多钱国内搜索引擎排名第一
  • 新闻聚合网站怎么做搜索seo怎么优化
  • 做网站官网需多少钱推广app赚钱
  • 做网站时点击显示策划书模板
  • 襄阳网站建设feeyr扬州seo博客
  • 校园论坛网站怎么做seo搜索引擎优化平台
  • 网站如何备案工信局正规网络公司关键词排名优化
  • 网站策划的步骤网站注册地址查询
  • 自己做的网站怎么绑域名房管局备案查询网站
  • 北京建网站影视站seo教程