Linux——查看与创建进程

task_struct的内容

我们已经知道,在Linux中的PCB为task_struct,而其中的内容为

• 标示符: 描述本进程的唯一标示符,用来区别其他进程。

• 状态: 任务状态,退出代码,退出信号等。

• 优先级: 相对于其他进程的优先级。

• 程序计数器: 程序中即将被执行的下一条指令的地址。

• 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针

• 上下文数据: 进程执行时处理器的寄存器中的数据。

• I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。

• 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。

• 其他信息

程序计数器就是PC指针,其中存放下一条指令的地址,PC指针要与IR(指令寄存器)合作,IR存放当前正在被CPU译码和执行的那条指令本身。当IR存放的代码被CPU执行完后,PC用来从内存中取出下一条指令,这条新指令才会被加载到IR中,

他们并不是直接传递关系,而是通过内存进行连接。

上下文数据就是硬件上下文,其中存放了CPU执行任务所必需的全部硬件状态信息,类似一个游戏的即时存档,内容包括程序计数器,寄存器等,用来进行上下文切换,由于单核CPU一次只能执行一个任务,所以当需要切换到其他任务时,会保存当前任务的数据用来下次切换回来,保存的数据是在PCB里面的,而在早期的Linux版本下,是存放在tss_struct(任务状态段),其是在task_struct的,而在现在的版本已经不是了。

查看进程的方法

可以用/proc来看,/proc是显出所有的进程,我们可以用getpid()函数查看该程序的pid,也就是标示符,再使用/proc/pid来查看进程,但更推荐使用ps命令,使用ps ajx | head -1 && ps ajx myprocess就可以查看程序myprocess的进程了。

Linux增多进程的方法是通过父进程创建子进程,而一个单进程程序的父进程是不变的,都是bashgetppid()是返回父进程的pid

创建子进程的方法

使用函数fork可以创建子进程

fork函数对于子进程返回0,对于父进程返回子进程的pid,如果fork失败就会返回-1。

我们使用变量去接受fork的返回值时,会惊奇的发现该变量同时为0同时为正数。

那么就会出现三个问题

  1. 为什么对于父进程返回子进程的pid,对于子进程返回0?
  2. 一个函数为什么会同时返回两个值
  3. 为什么一个变量会同时等于两个值
    首先对于第一个问题,由于父进程:子进程=1:n,所以子进程对父进程是很容易找到的,因为只有一个父亲,而父进程找到子进程是需要有pid的,因为父进程是有很多子进程的,类似于父亲有很多孩子,而孩子只需要叫声爹就知道自己父亲是谁,而父亲需要叫孩子的名字才知道找的是哪一个孩子。
    对于第二个问题,首先当一个函数进行返回时,那就说明该函数的功能是已经实现了,而fork创建的子进程,默认是没有自己需要的数据的,所以就会跟父进程一模一样,是默认共享父进程的代码和数据,又由于进程是需要保证独立性的,父进程挂掉并不会影响子进程,所以当fork该return时,说明已经创建了子进程了,而父进程是有fork的,那么子进程共享父进程的代码,那子进程也会有fork,所以其实是两个fork返回两个值,并不是一个fork返回两个值
    对于第三个问题,嘿嘿后面再说
相关推荐
守城小轩7 分钟前
基于Chrome140的Yahoo自动化(关键词浏览)——需求分析&环境搭建(一)
运维·自动化·chrome devtools·浏览器自动化·指纹浏览器·浏览器开发
charlie11451419128 分钟前
Linux 字符设备驱动:cdev、设备号与设备模型
linux·开发语言·驱动开发·c
handler0130 分钟前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
zhouwy11335 分钟前
Linux进程与线程编程详解
linux·c++
我星期八休息1 小时前
IT疑难杂症诊疗室:AI时代工程师Superpowers进化论
linux·开发语言·数据结构·人工智能·python·散列表
切糕师学AI1 小时前
深入解析 Zsh 与 Oh-My-Zsh:打造高效现代化终端
linux·终端·zsh
切糕师学AI2 小时前
Ubuntu 下 Git 完全使用指南
linux·git·ubuntu
草履虫君2 小时前
VMware 虚拟机网络性能优化指南:从 11 秒到 4 秒的完整调优实践
服务器·网络·经验分享·性能优化
日取其半万世不竭2 小时前
LVM 逻辑卷管理:不停机扩容磁盘的正确方式
运维·服务器
优化Henry3 小时前
TDD-LTE站点Rilink=3链路故障处理案例---BBU侧C口“有发光、无收光”的排查与恢复
运维·网络·信息与通信·tdd