Linux系统编程——进程(一)关于进程的一些问题
发布日期:2021-05-07 23:27:12 浏览次数:27 分类:精选文章

本文共 1674 字,大约阅读时间需要 5 分钟。

一、什么是程序,什么是进程,有什么区别?

程序程序是静态的概念,是存放在磁盘中的可执行文件,如gcc data.c -o Pro,磁盘中生成一个Pro文件,叫做程序

进程进程是程序的一次运行活动,也就是程序运行起来了,在系统中又多了一个进程

二、如何查看系统中有哪些进程?

1: PS指令

ps -aux :显示全部进程
在这里插入图片描述
grep(文件查找) :显示部分进程

使用方法

ps -aux | grep init //显示关于init的进程

在这里插入图片描述

2、使用top指令查看,类似于Windows的任务管理器,(可以用来评估程序对CPU的使用情况)
在这里插入图片描述

三、什么是进程标识符?

1.PID(process ID):

PID是程序被操作系统加载到内存成为进程后动态分配的资源,每次程序执行的时候,操作系统都会重新加载,PID在每次加载的时候都是不同的。
Pid = 0:称为交换进程(swapper)
作用——进程调读

Pid = 1:init进程

作用——系统初始化

2、PPID(parent process ID):PPID是程序的父进程号。

3、PID和PPID都是非零的整数。

4、PID是唯一的,一个PID只标识一个进程。

5、一个进程创建的另一个新进程称为子进程。相反地,创建子进程的进程称为父进程。

6、对于一个普通的用户进程,它的父进程就是执行它的哪个Shell,对于Linux而言,Shell就是bash。

注:

a:在Linux系统中执行的第一个进程是init,它是所有进程的祖先最终都会落到进程号为1的init进程身上。
b:init进程是linux内核启动后第一个执行的进程,引导系统,启动守护进程并且运行必要的程序。

编程使用mypid函数获取自己的pid号

头文件

#include 
#include

函数原型

pid_t getpid(void);pid_t getppid(void);

代码

#include 
#include
#include
int main(){ pid_t pid; //定义pid为pid_t的类型 pid_t ppid; pid = getpid(); //获取自己的pid号 ppid = getppid(); printf("my pid is %d\n",pid); printf("my ppid is %d\n,",ppid); while(1); //不让程序退出 return 0;}

在这里插入图片描述

因为程序中有一个死循环,所以a.out的CPU使用为100%
在这里插入图片描述

四、什么叫父进程,什么叫子进程?

如果进程A创建了进程B,那么A叫做父进程,B叫做子进程,父子进程都是相对的概念,相当于人类中的父子关系

五、C程序的存储空间是如何分配的?

在这里插入图片描述

从下到上分别为正文(代码段)、初始化的数据段、未初始化的数据(BSS段)、堆、栈、命令行参数和环境变量。

代码段代码段就是CPU执行的机器指令部分,用来存放代码执行部分,代码段这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许自修改程序。 在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。

数据段:通常是用来存放程序中已初始化的全局变量的一块内存区域,数据段属于静态内存分配。

BSS段:BSS段通常是指用来存放程序中未初始化的或者初始化为0的全局变量和静态变量的一块内存区域,特点是可读写的,在程序执行之前BSS段会自动清0。

:通常在堆中进行动态的内存分配,如(malloc函数申请的空间)

:一些自动变量或者函数调用时所需要保存的信息都可以存放在此段中,函数调用返回地址都存放在栈中

命令行参数和环境变量:这个部分是用来存放一些命令行的参数的,如main函数中的 int argc , char **argv 等

上一篇:Linux系统编程——进程(三)fork函数和vfork函数的区别
下一篇:Linux系统编程——文件编程(八)用C语言标准库函数操作文件

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月04日 17时08分30秒