【Linux】进程(1)基础

张开发
2026/4/20 5:25:53 15 分钟阅读
【Linux】进程(1)基础
目录一、进程的基本概念二.描述进程(PCB)1.基本概念2.task_struct操作系统中的先描述再组织1task_struct里的一些重要内容的2组织进程3查看进程4通过系统调用获取进程标识符5通过系统调用创建进程-fork()一、进程的基本概念概念程序的一个执行实例正在执行的程序等内核观点担当分配系统资源如CPU时间内存的实体进程 内核数结构(task_struct) 自己的程序代码和数据操作系统中的先描述二.描述进程(PCB)1.基本概念进程信息被放在一个叫做进程控制块的数据结构中可以理解为进程属性的集合。其名称为PCBLinux操作系统下的PCB为task_struct在Linux中描述进程的结构体叫做task_struct。task_struct是Linux内核的一种数据结构类型它会被装载到RAM(内存)里并且包含着进程的信息。装载到内存时会形成对应的页表。2.task_struct操作系统中的先描述再组织1task_struct里的一些重要内容的标示符描述本进程的唯一表示符(该进程的idPID)用来区别其他进程。在代码中可以用getpid()函数获取。该进程的父进程idPPID状态任务状态(S、R、Z等等)退出代码退出信号等。优先级相对于其他进程的优先级。程序计数器程序中即将被执行的下一条指令的地址。内存指针包括程序代码和进程相关数据的指针还有和其他进程共享的内存块的指针。上下文数据进程执行时处理器的寄存器中的数据。I/O状态信息等其他信息。2组织进程task_struct是双链表形式(next、prev指针)存在于内核中内核中会以链表形式管理task_struct。3查看进程1.进程的信息可以通过/proc系统文件夹查看如想查看PID(进程的ID)为1的进程信息就查看/proc/1这个文件夹2.大多数进程信息可以使用top和ps这些用户及工具来获取4通过系统调用获取进程标识符#include stdio.h #include sys/types.h #include unistd.h int main() { printf(pid: %d\n, getpid()); printf(ppid: %d\n, getppid()); return 0; }5通过系统调用创建进程-fork()在Linux系统中可用man fork指令来查看fork函数的用法fork用来创建子进程有两个返回值1.成功创建子进程时父进程中fock()返回子进程id如果失败返回小于0的数2.子进程中fork()返回0父子进程代码共享数据各自开辟空间私有一份采用写时拷贝#include stdio.h #include sys/types.h #include unistd.h int main() { int ret fork(); printf(%d, ret: %d\n, getpid(), ret); sleep(1); return 0; }fork()生成的子程序会独一份运行原本代码fork()函数后的代码。所以fork之后可以用if进行分流#include stdio.h #include sys/types.h #include unistd.h int main() { int ret fork(); if(ret 0) { perror(fork); return 1; } else if(ret 0) { //child printf(I am child : %d, ret: %d\n, getpid(), ret); } else { //father printf(I am father : %d, ret: %d\n, getpid(), ret); } sleep(1); return 0; }以上讲述的是进程的基本概念进程的描述、组织如何创建子进程如何查看进程下一章将详细讲述进程的状态。

更多文章