P9 LinuxC 进程概述 终端启动的程序父进程是终端

2023-12-10 09:28

本文主要是介绍P9 LinuxC 进程概述 终端启动的程序父进程是终端,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 前言

                                     

🎬 个人主页:@ChenPi

🐻推荐专栏1: 《C++_@ChenPi的博客-CSDN博客》✨✨✨ 

🔥 推荐专栏2: 《Linux C应用编程(概念类)_@ChenPi的博客-CSDN博客》✨✨✨

🛸推荐专栏3: ​​​​​​《链表_@ChenPi的博客-CSDN博客 》 ✨✨✨
🌺本篇简介  :  这一章我们学习一下Linux中非常重要的一部分——进程

Linux 是一个多用户多任务的操作系统,每个用户可以同时运行多个程序

进程是程序运行的主体,包括进程的创建,调度和消亡的整个过程

当用户执行一个指令或者启动一个程序时,就创建了一个进程

一个运行的程序也可能有多个进程。

每个进程将被分配各种资源           

01 Linux 下的进程控制块(PCB)

进程是Linux系统的基本调度单位。在Linux系统中,进程是通过进程控制块来描述的。

在Linux进程控制块由task_struct数据结构实现,它记录了以下几个类型的信息:

  1. 状态信息。例如,这个进程处于可执行状态、休眠、挂起等。
  2. 性质。由于Linux有很多变种,进程有自己独特的性质。
  3. 资源。资源的链接,如内存,还有资源的限制和权限等。
  4. 组织。例如,按照家族关系建立起来的树(父进程,子进程等)。

每个进程用一个task struct数据结构来表示。

数组task包含指向系统中所有task_struct结构的指针。

系统中的最大进程数目受task数组大小的限制,默认值一般为512。

创建新进程时,Linux将从系统内存中分配一个task_struct结构并将其加入task数组。

如果想看这个结构体可以进入下面链接

Linux PCB(进程控制块) 详解-CSDN博客

我觉得讲的也很清楚

当前运行进程的结构用current 指针来指示。

进程控制块(Process Control Block,PCB)是用来记录进程状态及其他相关信息的数据结构。

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 指令试一下,看把终端杀了会怎么样

可以看到程序的父进程是终端,因为这个程序是依托于终端运行的 

所以它的父进程是终端,父进程被杀死后,程序也停止运行了

这篇关于P9 LinuxC 进程概述 终端启动的程序父进程是终端的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/476709

相关文章

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

关于最长递增子序列问题概述

《关于最长递增子序列问题概述》本文详细介绍了最长递增子序列问题的定义及两种优化解法:贪心+二分查找和动态规划+状态压缩,贪心+二分查找时间复杂度为O(nlogn),通过维护一个有序的“尾巴”数组来高效... 一、最长递增子序列问题概述1. 问题定义给定一个整数序列,例如 nums = [10, 9, 2

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat

树莓派启动python的实现方法

《树莓派启动python的实现方法》本文主要介绍了树莓派启动python的实现方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、RASPBerry系统设置二、使用sandroidsh连接上开发板Raspberry Pi三、运

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

Linux之进程状态&&进程优先级详解

《Linux之进程状态&&进程优先级详解》文章介绍了操作系统中进程的状态,包括运行状态、阻塞状态和挂起状态,并详细解释了Linux下进程的具体状态及其管理,此外,文章还讨论了进程的优先级、查看和修改进... 目录一、操作系统的进程状态1.1运行状态1.2阻塞状态1.3挂起二、linux下具体的状态三、进程的

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20