【Linux C | 进程】进程环境 | 什么是进程?进程的开始、终止、存储空间布局、命令行参数、环境变量

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍 🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭

本文未经允许,不得转发!!!

目录

  • 🎄一、概述
  • 🎄二、进程的开始、终止
    • ✨2.1 main 函数
    • ✨2.2 进程终止
  • 🎄三、程序的存储空间布局
  • 🎄四、命令行参数
  • 🎄五、环境表、环境变量
    • ✨5.1 环境表
    • ✨5.2 环境变量
  • 🎄六、总结


在这里插入图片描述

🎄一、概述

首先,我们了解什么是进程?
当代码编写后编译得到的可执行文件,就是程序,当程序运行起来后就是进程。也就是说,进程就是运行后的程序。

每个进程都有-一-个非负整型表示的唯一进程ID。因为进程D标识符总是唯一的,常将其用作其他标识符的一部分以保证其唯一性。
ID为0的进程通常是调度进程,常被成为交换进程(swapper);
ID为1的进程通常是init进程,在自举过程结束后,由内核调用。

查看进程

  • 1、简单方式
    ps :以简略方式显示当前控制终端的进程信息。
  • 2、复杂方式
    • ps -aux (linux中可用, unix中不支持)
      a: 显示所有用户控制终端的进程信息
      u: 以详尽方式显示
      x: 也显示那些无控制终端的进程信息
    • ps -elf (推荐使用, 具有通用性)
      e: 所有用户的进程
      l: 以长格式显示信息
      f: 按完整格式显示
  • 3、进程信息列表
    • UID : 进程属主
    • PID : 进程ID
    • PPID: 父进程ID
    • TTY: 该进程属于哪个终端
      tty1~tty6: 本机登录者
      pts/?? : 远程登录者
    • PRI, NI: 该进程的优先级 nice
    • S: 进程状态
      O—就绪
      R— 运行状态
      S— sleep
      Z— 僵尸

本文介绍进程的开始(main函数)、终止、存储空间布局、命令行参数、环境变量等。

在这里插入图片描述

🎄二、进程的开始、终止

✨2.1 main 函数

C程序总是从main函数开始执行。

当内核执行C程序时,在调用main前先调用一个特殊的启动例程。可执行程序文件将此启动例程指定为程序的起始地址——这是由连接编辑器设置的,而连接编辑器则由C编译器调用。启动例程从内核取得命令行参数和环境变量值,然后为按上述方式调用main函数做好安排。

✨2.2 进程终止

有8种方式使进程终止(termination),其中5种为正常终止,它们是
(1)从main返回。
(2)调用exit。
(3)调用_exit或_Exit。
(4)最后一个线程从其启动例程返回。
(5)最后一个线程调用pthread_exit

异常终止有3种方式,它们是
(6)调用abort。
(7)接到一个信号并终止。
(8)最后一个线程对取消请求做出响应。

在这里插入图片描述

🎄三、程序的存储空间布局

一般,C程序一直由下面几个部分组成:

  • 正文段(text),也称代码段。这是由CPU执行的机器指令部分。通常,正文段是可共享的,所以即使是频繁执行的程序(如文本编辑器、C编译器和shell等)在存储器中也只需有一个副本,另外,正文段常常是只读的,以防止程序由于意外而修改其自身的指令。
  • 初始化数据段。通常将此段称为数据段,它包含了程序中需明确地赋初值的变量。例如,C程序中出现在任何函数之外的声明:
    int maxcount = 99 ;
    使此变量带有其初值存放在初始化数据段中。
  • 非初始化数据段。通常将此段称为bss段,这一名称来源于一个早期的汇编运算符,意思是“block started by symbol”(由符号开始的块),在程序开始执行之前,内核将此段中的数据初始化为0或空指针。出现在任何函数外的C声明
    longsum [1000] ;
    使此变量存放在非初始化数据段中。
  • 。自动变量以及每次函数调用时所需保存的信息都存放在此段中。每次调用函数时,其返回地址以及调用者的环境信息(例如某些机器寄存器的值)都存放在栈中。然后,最近被调用的函数在栈上为其自动和临时变量分配存储空间。通过以这种方式使用栈,可以递归调用C函数。递归函数每次调用自身时,就使用一个新的栈帧,因此一个函数调用实例中的变量集不会影响另一个函数调用实例中的变量。
  • 。通常在堆中进行动态存储分配。由于历史上形成的惯例,堆位于非初始化数据段和栈之间。

在这里插入图片描述

在这里插入图片描述

🎄四、命令行参数

当指向一个C程序时,在命令行给该程序传递参数。传递的参数可以在main函数的两个参数进行读取;

  • argc表示参数个数,程序名也算在参数里。
    ./a.out  # argc为 1,argv[0]就是a.out
    ./a.out command1 test line yes five #argc为 6
    
  • argv是一个char*数组,保存参数的字符串。argv[0]是程序名本身。
#include <stdio.h>
int main (int argc, char *argv [])
{int i;for (i = 0; i < argc; i++){/* echo all command-line args */printf ( "argv [%d] : %s \n", i, argv[i] );}return (0) ;
}

在这里插入图片描述

在这里插入图片描述

🎄五、环境表、环境变量

✨5.1 环境表

每个程序都会接收到一张环境表。与参数表一样,环境表也是一个字符指针数组,其中每个指针包含一个以null结束的C字符串的地址。全局变量environ则包含了该指针数组的地址:

extern char **environ;

通常用getenvputenv函数来访问特定的环境变量,而不是用environ变量。但是,如果要查看整个环境,则必须使用environ指针。

在这里插入图片描述
看例子:

#include <stdio.h>
extern char **environ;
int main (int argc, char *argv [])
{int i;for (i = 0; *(environ+i)!=NULL; i++){/* echo all command-line args */printf ( "environ[%02d]: %s \n", i, *(environ+i) );}return (0) ;
}

在这里插入图片描述

✨5.2 环境变量

ISO C定义了一个函数getenv,可以用其取环境变量值,但是该标准又称环境的内容是由实现定义的。

#include <stdlib.h>
char *getenv(const char *name);

getenv函数搜索环境列表以查找环境变量名,并返回一个指向相应值字符串的指针。

看例子:

#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv [])
{printf ( "HOME=[%s]\n", getenv("HOME"));printf ( "SHELL=[%s]\n", getenv("SHELL"));return (0) ;
}

在这里插入图片描述

🎄六、总结

本文介绍了什么是进程,进程的开始、结束,还有程序的存储空间布局,以及在main函数来获取命令行参数;最后结束环境表、环境变量。

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/639304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OPC UA网关BL121 支持Modbus转OPC UA协议转换

随着物联网技术的迅猛发展&#xff0c;人们深刻认识到在智能化生产和生活中&#xff0c;实时、可靠、安全的数据传输至关重要。在此背景下&#xff0c;高性能的物联网数据传输解决方案——协议转换网关应运而生&#xff0c;广泛应用于工业自动化和数字化工厂应用环境中。 钡铼…

从心理学角度看海外网红营销:品牌与消费者的心理互动

近年来&#xff0c;随着社交媒体的蓬勃发展&#xff0c;海外网红营销成为品牌推广的一种独特而有效的手段。这种新型营销方式不仅仅依赖于产品本身的特性&#xff0c;更加注重通过网红与消费者之间的心理互动来建立品牌形象&#xff0c;激发购买欲望。本文Nox聚星将和大家从心理…

17.用户身份与能力

Linux系统的管理员之所以是root&#xff0c;并不是因为它的名字叫root&#xff0c;而是因为该用户的身 份号码即UID&#xff08;User IDentification&#xff09;的数值为 0。在 Linux 系统中&#xff0c;UID就像我们的身份证号 码一样具有唯一性&#xff0c;因此可通过用户的U…

【明道云】学习笔记1-了解APaaS

【背景】 APaaS (Application Platform As A Service) &#xff0c;即应用程序平台即服务&#xff0c;这是基于PaaS&#xff08;平台即服务&#xff09;的一种解决方案&#xff0c;支持应用程序在云端的开发、部署和运行&#xff0c;提供软件开发中的基础工具给用户&#xff0…

基于XG24-EK2703A的BLE HID蓝牙键盘+鼠标复合设备功能开发(BLE+HID+FreeRTOS+Gecko SDK)

目录 项目介绍硬件介绍项目设计开发环境及工程参考总体流程图硬件基本配置应用初始化按键中断回调定时器回调按键响应任务蓝牙事件回调BLE HIDReport Map及报文键盘设备鼠标设备复合设备 发送字符串上/下滚动 功能展示项目总结 &#x1f449; 【Funpack3-1】基于XG24-EK2703A的…

Java streamFile

1.Stream流 1.1体验Stream流【理解】 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合&#xff0c;存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集合 把"张"开头的集合中的长度为3的元素存储到一个新的集合 遍历上一步得…

使用Scrapy 爬取“http://tuijian.hao123.com/”网页中左上角“娱乐”、“体育”、“财经”、“科技”、历史等名称和URL

一、网页信息 二、检查网页&#xff0c;找出目标内容 三、根据网页格式写正常爬虫代码 from bs4 import BeautifulSoup import requestsheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/53…

每天10个前端小知识 <Day 12>

前端面试基础知识题 1. Promise中&#xff0c;resolve后面的语句是否还会执行&#xff1f; 会被执行。如果不需要执行&#xff0c;需要在 resolve 语句前加上 return。 2. 什么是内存泄漏&#xff1f;什么原因会导致呢&#xff1f; 内存泄露的解释&#xff1a;程序中己动态…

酒店网络SIP融合对讲系统联动110方案

酒店网络SIP融合对讲系统联动110方案 酒店对讲系统设计采用了基于网络传输的对讲系统&#xff0c;利用网络平台&#xff0c;把管理中心和前端各个求助点连接起来&#xff0c;所有的通讯信号和控制协议通过网络进行传输&#xff0c;采用基于网络数字SIP网络对讲系统&#xff0c…

【数据结构】 双链表的基本操作 (C语言版)

目录 一、双链表 1、双链表的定义&#xff1a; 2、双链表表的优缺点&#xff1a; 二、双链表的基本操作算法&#xff08;C语言&#xff09; 1、宏定义 2、创建结构体 3、双链表的初始化 4、双链表表插入 5、双链表的查找 6、双链表的取值 7、求双链表长度 8、双链表…

Linux shell编程学习笔记41:lsblk命令

边缘计算的挑战和机遇 边缘计算面临着数据安全与隐私保护、网络稳定性等挑战&#xff0c;但同时也带来了更强的实时性和本地处理能力&#xff0c;为企业降低了成本和压力&#xff0c;提高了数据处理效率。因此&#xff0c;边缘计算既带来了挑战也带来了机遇&#xff0c;需要我…

阿里云国外服务器价格购买与使用策略

阿里云国外服务器优惠活动「全球云服务器精选特惠」&#xff0c;国外服务器租用价格24元一个月起&#xff0c;免备案适合搭建网站&#xff0c;部署独立站等业务场景&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云国外服务器优惠活动&#xff1a; 全球云服务器精选特惠…

学习笔记-李沐动手学深度学习(二)(08-09、线性回归、优化算法、Softmax回归、损失函数、图片分类)

总结 以_结尾的方法&#xff0c;好像是原位替换&#xff08;即 原地修改&#xff0c;就地修改变量&#xff09;如 fill_() 感恩的心&#xff1a;&#xff08;沐神的直播环境&#xff09; 08-线性回归基础优化算法 引言&#xff08;如何在美国买房&#xff09; 根据现在行…

用ChatGPT教学、科研!亚利桑那州立大学与OpenAI合作

亚利桑那州立大学&#xff08;简称“ASU”&#xff09;在官网宣布与OpenAI达成技术合作。从2024年2月份开始&#xff0c;为所有学生提供ChatGPT企业版访问权限&#xff0c;主要用于学习、课程作业和学术研究等。 为了帮助学生更好地学习ChatGPT和大语言模型产品&#xff0c;AS…

unicloud 云对象 schema

目录 云对象 创建云对象 客户端调用 二、Schema&#xff08;表结构&#xff09; 什么是Schema&#xff1f; 如何编写DB Schema Schema的一级节点 客户端直连数据库 字段属性 字段类型bsonType 默认值defaultValue/forceDefaultValue 云对象 创建云对象 云对象&#…

HarmonyOS鸿蒙应用开发 (一、环境搭建及第一个Hello World)

万事开头难。难在迈出第一步。心无旁骛&#xff0c;万事可破。没有人一开始就能想清楚&#xff0c;只有做起来&#xff0c;目标才会越来越清晰。--马克.扎克伯格 前言 2024年1月16日&#xff0c;华为目前开启已HarmonyOS NEXT开发者预览版Beta招募&#xff0c;报名周期为1月15…

Conmi的正确答案——eclipse C/C++显示“未解析的包含:<xxx.h>”/“Unresolved inclusion: <xxx.h>”

eclipse IDE 版本&#xff1a;2023-12 部分采自&#xff1a;解决方法&#xff1a;关于问题 “C - Unresolved inclusion: <iostream>” 解释事项&#xff1a;方法一可能版本不同&#xff0c;部分界面修改了。这里使用的是方法二的解决方法。&#xff08;或者各位大神的描…

JavaEE中什么是Web容器?

Web容器&#xff08;也称为Servlet引擎&#xff09;是一个用于执行Java Servlet和JSP的服务器端环境。它负责管理和执行在其上运行的Web应用程序。 Tomcat是Web容器 Apache Tomcat 是一个流行的开源的Web容器&#xff0c;它实现了Java Servlet和JavaServer Pages&#xff08;…

【深度学习目标检测】十七、基于深度学习的洋葱检测系统-含GUI和源码(python,yolov8)

使用AI实现洋葱检测对农业具有以下意义&#xff1a; 提高效率&#xff1a;AI技术可以快速、准确地检测出洋葱中的缺陷和问题&#xff0c;从而提高了检测效率&#xff0c;减少了人工检测的时间和人力成本。提高准确性&#xff1a;AI技术通过大量的数据学习和分析&#xff0c;能够…

第五课:MindSpore自动并行

文章目录 第五课&#xff1a;MindSpore自动并行1、学习总结&#xff1a;数据并行模型并行MindSpore算子级并行算子级并行示例 流水线并行GPipe和Micro batch1F1B流水线并行示例 内存优化重计算优化器并行 MindSpore分布式并行模式课程ppt及代码地址 2、学习心得&#xff1a;3、…