linux编程--进程--进程相关概念

5个问题了解进程:

  1. 什么是程序,什么是进程,有什么区别
  2. 如何查看系统中有哪些进程?
  3. 什么是进程标识符?
  4. 什么叫父进程,什么叫子进程?
  5. c程序的存储空间是如何分配的?

1.程序是静态的概念,gcc xxx.c -o pro 会生成pro文件,叫做程序(没跑起来)。 进程是程序的一次运动活动,程序跑起来了,系统中就多了一个进程。

2.    使用ps指令,配合grep使用

        ps -aux:查看所有进程

        ps -aux|grep init:过滤作用,查找init进程

        top :类似windows系统进程,动态

3.进程标识符(Process ID)是进程描述符中最重要的组成部分,是在当前 Linux 系统中唯一的一个非负整数,用于标识和对应唯一的进程。

Linux 内核使用了一个数据类型 pid_t 来存放进程的进程标识符,这个数据类型的实质是一个32位的无符号整型数据。

进程标识符 pid=0:对应的是交换进程(swapper)。
进程标识符 pid=1:对应的是初始化进程(init)。
 

可以使用 getpid 系列函数来获得当前进程的进程标识符。

#include 
#include 
pid_t getpid(void);
pid_t getppid(void);

getpid 函数用于获得当前调用进程的进程标识符。
getppid 用于获得当前调用进程的父进程的进程标识符。

4.父进程&子进程:进程A创建进程B,A为父进程,B为子进程

fork函数包含在unistd.h库中,其最主要的特点是,调用一次,返回两次,当父进程fork()创建子进程失败时,fork()返回-1,当父进程fork()创建子进程成功时,此时,父进程会返回子进程的pid,而子进程返回的是0。

linux编程--进程--进程相关概念_第1张图片

转自知乎

如上图所示,当fork()函数调用后,父进程中的变量pid赋值成子进程的pid(pid>0),所以父进程会执行else里的代码,打印出"This is the parent",而子进程的变量pid赋值成0,所以子进程执行if(pid == 0)里的代码,打印出"This is the child"

5.c程序的存储空间分配(代码段、数据段、bss、堆、栈)

linux编程--进程--进程相关概念_第2张图片

栈主要用来存放局部变量, 传递参数, 存放函数的返回地址.

堆用于存放动态分配的对象, 当你使用malloc ,所得到的空间就在堆中。

你可能感兴趣的:(嵌入式Linux学习,linux,进程)