进程概念(三)----- fork 初识

前言

该篇文章是继 添加链接描述 文章的后续,针对 linux 中的 task_struct 进程的 PID(也即标识符)介绍,和系统调用中的 fork 展开初步的认识。

task_ struct 内容分类:
标识符:  描述本进程的唯一标识符,用来区别其他进程。
状态:  任务状态,退出代码,退出信号等。
优先级:  相对于其他进程的优先级。
程序计数器:  程序中即将被执行的下一条指令的地址。(其作用就相当于进程运行了一段时间后,因为系统调度等原因,停止了对该进程的执行而后续回来继续执行的时候,需要知道上次执行到什么地方了。也好比我们看书,今天看完不想看了之后,会在此处做一下标记,方便后续继续向下观看)
内存指针:  包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针(比如记录了该进程所匹配的代码和数据的存储位置)
上下文数据:  进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
I/O状态信息:  包括显示的I/O请求,分配给进程的 I/O 设备和被进程使用的文件列表。
记账信息:  可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。(保证系统调度的公平等)
其他信息


1. pid && ppid

在前面的进程相关的文章,我们已经知道了,因为用户不擅长直接对操作系统进行访问,并且操作系统也不会相信用户,因此用户无法直接访问操作系统。而在上一篇文章的末尾,我们简单见过了进程的 PID,但是那是通过系统指令获取到的 PID,而作为用户在编程语言上,在无法访问操作系统拿到数据的前提下,如何获取进程的 PID 等进程信息呢?

// 测试demo
#include<iostream>
#include<unistd.h>
using namespace std;

int main()
{
    while(1)
    {
     	cout << "I am a process, my pid is " << getpid() << ", my parentId is " << getppid() << '\n';
        sleep(1);
    }
    return 0;
}

在这里插入图片描述

左右对比,我们是可以得知,在我们通过 c / c++ 编写的程序,运行起来后,系统会自动会该进程创建一个 PID,并且在cpp 中预取这个 PID 和我们在系统中获取的 PID 是一致的。

所以,PID 有什么用呢?? ---- 既然 PID 是每个进程的唯一标识符,那么当我们对进程进行管理的时候,就可以通过其PID 对该进程进行操作,比如杀掉该进程 kill -9 20059 等操作。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值