怎么在静态网站基础上加动态,百度不收录wordpress,织梦网站登录,郴州网站制作前言 #x1f3ac; 个人主页#xff1a;ChenPi #x1f43b;推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨  #x1f525; 推荐专栏2: 《Linux C应用编程#xff08;概念类#xff09;_ChenPi的博客-CSDN博客》✨✨✨ #x1f6f8;推荐专栏3: 《链表_ChenP… 前言 个人主页ChenPi 推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨   推荐专栏2: 《Linux C应用编程概念类_ChenPi的博客-CSDN博客》✨✨✨ 推荐专栏3: 《链表_ChenPi的博客-CSDN博客 》 ✨✨✨ 本篇简介  :  这一章我们学习一下Linux中非常重要的一部分——进程 Linux 是一个多用户多任务的操作系统每个用户可以同时运行多个程序 
进程是程序运行的主体包括进程的创建调度和消亡的整个过程 
当用户执行一个指令或者启动一个程序时就创建了一个进程 
一个运行的程序也可能有多个进程。 
每个进程将被分配各种资源            
01 Linux 下的进程控制块(PCB) 
进程是Linux系统的基本调度单位。在Linux系统中进程是通过进程控制块来描述的。 
在Linux进程控制块由task_struct数据结构实现它记录了以下几个类型的信息: 状态信息。例如这个进程处于可执行状态、休眠、挂起等。性质。由于Linux有很多变种进程有自己独特的性质。资源。资源的链接如内存还有资源的限制和权限等。组织。例如按照家族关系建立起来的树(父进程子进程等)。 每个进程用一个task struct数据结构来表示。 
数组task包含指向系统中所有task_struct结构的指针。 
系统中的最大进程数目受task数组大小的限制默认值一般为512。 
创建新进程时Linux将从系统内存中分配一个task_struct结构并将其加入task数组。 
如果想看这个结构体可以进入下面链接 
Linux PCB(进程控制块) 详解-CSDN博客 
我觉得讲的也很清楚 
当前运行进程的结构用current 指针来指示。 
进程控制块(Process Control BlockPCB)是用来记录进程状态及其他相关信息的数据结构。 
PCB是进程存在的唯一标志PCB存在则进程存在。 
系统创建进程时会产生一个 PCB撤销进程时PCB也自动消失。 
2.进程的标识 
PCB的内容丰富其中的进程标识包括进程号、用户标识、用户组标识、进程时间、资源利用情况等。 
这里只介绍其中最主要的进程号也就是PID。 
PID唯一的标识一个进程。除了进程的PID外进程的父进程号(PPID)也是一个主要的标识。 
当父进程终止时子进程也随之而终止。 
但子进程终止父进程并不一定终止。 
PID 和 PPID都是一个非零正整数。 
在Linux中可以通过系统调用getpid 得到进程的 ID 
而getppid可以得到父进程(创建调用该函数进程的进程)的ID。 
03获取进程PID号 —— getpid() 
Linux 系统下的每一个进程都有一个进程号process ID简称 PID 
进程号是一个正数用于唯一标 识系统中的某一个进程。 
在应用程序中可通过系统调用 getpid()来获取本进程的进程号其函数原型如下所示 
#include sys/types.h 
#include unistd.h pid_t getpid(void);  
返回值 成功返回当前进程的ID号失败返回-1 
应用代码测试 
#include stdio.h 
#include stdlib.h 
#include sys/types.h 
#include unistd.h int main(void) { pid_t pid  getpid(); printf(本进程的 PID 为: %d\n, pid); exit(0); }  ps aux|grep ./a.out 
通过PS指令我们可以看到我们运行的./a.out的这个进程是9910 
然后我们看我们代码打印出来的数字也是9910 
所以getpid这个系统调用是返回当前进程的ID号 04 getppid()获取父进程PID号 除了 getpid()用于获取本进程的进程号之外还可以使用 getppid()系统调用获取父进程的进程号其函 数原型如下所示 
#include sys/types.h 
#include unistd.h pid_t getppid(void);  返回值返回父进程的PID号  #include stdio.h 
#include stdlib.h 
#include sys/types.h 
#include unistd.h int main(void)  
{ pid_t pid  getpid(); //获取本进程 pid printf(本进程的 PID 为: %d\n, pid); pid  getppid(); //获取父进程 pid printf(父进程的 PID 为: %d\n, pid); exit(0); }  所以到底是不是这样呢 
我们使用KILL 指令试一下看把终端杀了会怎么样 可以看到程序的父进程是终端因为这个程序是依托于终端运行的  
所以它的父进程是终端父进程被杀死后程序也停止运行了