Linux下关于进程的简单理解(C语言)

环境:ubuntu18.04

一、什么是进程

进程是系统中正在运行的一个程序,程序一旦运行就是一个进程。
于程序猿而言,进程是我们熟知的运行一个程序。
于计算机而言,进程是一个程序的执行/启动。
Linux下一个进程在内存中由三部分数据组成,即代码段、堆栈段、数据段
代码段:存放程序代码。
堆栈段:存放程序的返回地址、参数、局部变量等。
数据段:存放程序的全局变量、常数、动态数据分配的数据空间等。

二、终端命令说明

ps:查看当前终端进程
ps -ef:查看系统全部进程
ps - ef |more 同样是查看系统全部进程,但结果可以分页查看

使用ps -ef命令行结果如下
在这里插入图片描述
UID:启动进程的OS用户
PID:进程编号
PPID:进程的父进程编号
C:CPU资源使用百分比
STIME:进程启动时间
TTY:进程所属的终端
TIME:使用掉的CPU时间
CMD:执行的指令

三、代码示例

#include<stdio.h>
//#include<sys/types.h> //是Unix/Linux系统的基本系统数据类型的头文件,含有size_t,time_t,pid_t等类型
#include<unistd.h>
int main()
{
	printf("本程序的进程编号是: %d\n",getpid());//getpid()  获取本程序的进程编号
	int pid = fork(); //用于产生一个新进程
	//sleep(1);
	printf("pid=%d\n",pid);
	
	if( pid != 0 )
	printf("父进程编号是:%d\n",getpid()); 
	else
	printf("子进程编号是:%d\n",getpid());
	sleep(1);
	printf("父进程/子进程运行完后都会来到这儿!\n");
	sleep(1);
}

四、运行结果

在这里插入图片描述

五、分析

刚接触此内容的同学可能有点不太理解产生这个结果的原因

Q1、为什么fork()函数会返回两个值?
Q2、为什么if和else会都被运行?

Solution

调用fork()函数之后,fork()函数返回值有两种,一种是子程序,fork()的返回值是0。另一种是父进程,fork()的返回值是子进程的编号。程序猿可以通过fork()的返回值来区分父进程和子进程,然后再执行不同的代码。调用这个fork()函数时发生了什么呢?fork()函数创建了一个新的进程,新进程(子进程)与原有的进程(父进程)一模一样。子进程和父进程使用相同的代码段;子进程拷贝了父进程的堆栈段和数据段。子进程一旦开始运行,它复制了父进程的一切数据,然后各自运行,相互之间没有影响。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

eeeasyFan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值