深圳高端网站建设招聘,wordpress响应式免费,wordpress 企业模板 免费下载,一般做美食网站的产品需求1.当前工作目录 Linux 下使用 ls /proc 查看程序中的进程#xff0c;其中这些蓝色的数字代表的就是进程。 其中cwd(current working directory)就是当前工作目录#xff0c;那么为什么cwd 和 exe 是在同一级目录下呢因为 进程需要依赖可执行程序#xff0c;可执行程序需要依…1.当前工作目录 Linux 下使用 ls /proc 查看程序中的进程其中这些蓝色的数字代表的就是进程。 其中cwd(current working directory)就是当前工作目录那么为什么cwd 和 exe 是在同一级目录下呢因为 进程需要依赖可执行程序可执行程序需要依赖源代码所以不管是进程和可执行程序都默认生成在跟源代码同一级的目录下。 怎么更改当前工作目录呢 chdir。 查看chdir的使用手册。 用法如下更改完成后再去查看cwd 就会发现cwd已经更改 。 2. fork() 首先我们来查看一下fork函数的使用。 对于fork函数的返回值来说是最奇怪的 fork 函数竟然有两个返回值这是真的吗我们来创建程序来实验一下 我们可以惊奇的发现执行fork函数之后之后的代码竟然执行力两次并且这两个进程互为父子进程。 进程 内核数据结构 可执行程序的代码和数据fork函数创建的子进程也不例外并且子进程会继承父进程的绝大部分的属性(如代码和数据)这样子进程也会打印出和父进程相同的内容但是pid就不一样也是子进程没有继承父进程的属性。 在上面fork 函数的介绍中说道 fork 函数有两个 返回值返回给父进程的是子进程的pid返回给子进程的是 0。是这样的吗我们写个代码看一下 如果这两个死循环能够同时跑起来那么就能说明 id 的值既 大于0 又等于 0 我们来看程序执行的结果 这说明id 的值确实是既大于0 又等于 0。 在进程当中父进程可以有很多个子进程但是子进程只能有一个父进程这就相当于一个人可以有很多个儿子但只能有一个爹所以为了更好的辨识子进程父进程需要子进程的pid。 下面我们继续实验 当我们杀死父进程时候子进程竟然丝毫没有受到影响 这说明了父进程和子进程在创建之后都有了独立的代码和数据彼此不会收到影响。这是因为在fork之后 当父、子进程要对数据做修改时os会介入进来会给子进程在copy一份数据子进程就对这份数据做修改。既然有了两份数据就有两个返回值也不足为奇了 但问题的关键是一个变量怎么会有两个值但linux下确实可以做到这一点。 3.进程状态 进程被cpu运行需要在cpu下的队列进行排队在cpu队列下排队的进程我们都可以叫它运行状态(大多数教材都是这么叫的)被cpu正在执行的也肯定是运行状态。 进程(进程 task_struct PCB 可执行程序(狭义上这么说))排队这件事是进程进程所对应的PCB来排队的。进程在排队的时候一定是在等待某种资源。 一、进程不是一直在执行的比如一下代码 这个代码被执行后会卡住因为需要等待键盘输入。 二、进程放在cpu上也不是一直会运行的。 比如当我们写一个死循环时它会一直占用cpu的资源导致电脑上的其他资源会卡死但是事实并不是这样的我们电脑可能会卡一点但是其他的进程还是能正常的执行。这是系统中有一个叫“时间片”的概念。比如每个进程会执行 1ms 然后就执行下一个进程 在task_struct pcb 中会有struct_listnode n 通过 这个链表来管理全局的进程。 n 对象是我们自己搞得那么struct 中别的对象是怎么搞得呢 首先将 0 强制转换成结构体指针然后指向某个成员这时候就算出偏移量了然后再用n 的地址减去偏移量 就能够算出 task_struct 的地址然后在强制转化成该结构体指针。不就能拿到该结构体地址就能够访问该结构体的任意成员了 tast_struct pcb 中有很多个节点cpu 是一种设备所以对应的节点都可以链接到对应设备的队列上排队等待获取资源 进程的状态有 运行阻塞挂起。 运行状态简单的理解就是PCB在进程队列排队或者正在被cpu执行。 状态的不同决定了你下一步要干什么比如你的状态是生病下一步就是看病 那么操作系统也是这样的task_struct 中的状态其实就是一个整形变量。如下图 当程序走到了scanf 时那么程序就会卡住等待从键盘上获取资源。 这时候操作系统会将该进程的pcb中的某个节点 连接到 对应设备的队列上去同时该进程已经不在cpu队列了那么该进程的状态要从运行 状态改为阻塞状态这也就是状态的变迁。 当我们的进程正在等待软硬件资源的时候资源如果没有就绪我们进程task_struct 只能
1.将自己设置为阻塞状态。2.将自己的pcb连接到该资源提供的等待队列。 状态的变迁原因是os将pcb放到了不同的队列中。 挂起状态简单的理解为内存现在吃紧os将一些不重要的进程写入磁盘为内存空间辗转腾挪。