Linux应用编程和网络编程(7、进程概念)

1、程序的开始和结束

1.1、main函数由谁调用
(1)编译链接时的引导代码。
操作系统下的应用程序其实在main执行前也需要先执行一段引导代码才能去执行main,我们写应用程序时不用考虑引导代码的问题,编译链接时由链接器将编译器中事先准备好的引导代码给链接进去和我们的应用程序一起构成最终的可执行程序。
(2)运行时的加载器。
加载器是操作系统中的程序,当我们去执行一个程序时(譬如.a/.out ,譬如代码中用exec族函数来运行),加载器负责将这个程序加载到内存中去执行这个程序。
(3)程序在编译链接时用链接器,运行时用加载器,这两个东西对程序运行原理非常重要
(4)argc和argv的传参如何实现

1.2、程序如何结束
(1)正常终止:return、exit、_exit
(2)非正常终止:自己或他人发信号终止进程

1.3、atexit注册进程终止处理函数
(1)atexit注册多个进程终止处理函数,先注册的后执行(先进先出,和栈一样)
(2)return、exit和_exit的区别:return和exit效果一样,都是会执行进程终止处理函数,但是用_exit终止进程时并不执行atexit注册的进程终止处理函数

#include <stdio.h>
#include <stdlib.h>

void func1(void)
{
	printf("func1");

}

void func2(void)
{
	printf("func2");

}

int main(void)
{
	printf("hello world.\n");
	
	//当进程被正常终止时,系统会自动调用这里注册的func1执行
	atexit(func1);
	atexit(func2);
	
	printf("You are my apple!\n");

	return 0;
	
}

/*
执行结果:
hello world!
You are my apple!
func2
func1
*/

2、进程环境

2.1、环境变量
(1)export命令查看环境变量
(2)进程环境表介绍。每一个进程中都有一份所有环境变量构成的一个表格,也就是说我们当前进程中可以直接使用这些环境变量
(3)程序中通过environ全局变量使用环境变量
(4)获取指定环境变量函数getenv

#include <stdio.h>

int main(void)
{
	extern char **environ;    //声明就能用
	while(NULL != environ[i])
	{
		printf("%s\n", environ[i]);
		i++;
	}

	return 0;
	
}

2.2、进程运行的虚拟地址空间
(1)操作系统中每个进程哎独立地址空间中运行
(2)每个进程的逻辑空间均为4GB(32位系统)
(3)0-1G为OS,1-4G为应用
(4)虚拟地址到物理地址空间的映射
(5)意义:进程隔离,提供多进程同时进行

3、进程的引入

3.1、什么是进程
(1)进程是动态过程而不是静态实物
(2)进程是程序的一次运行过程,一个静态的可执行程序a.out的一次运行过程(a.out从运行到结束)就是一个进程
(3)进程控制块PCB(process control block),内核中专门用来管理一个进程的数据结构
3.2、进程ID
(1)getpid(获取当前进程ID)、getppid(获取父进程ID)、getuid(获取当前进程用户ID)、geteuid(获取当前进程有效用户ID)、getgid(获取当前进程组ID)、getegid(获取当前进程有效组ID)
(2)实际用户ID和有效用户ID区别
在这里插入图片描述

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main(void)
{
	pid_t p1 = -1, p2 = -1;
	
	printf("hello.\n");
	p1 = getpid();
	printf("pid = %d.\n", p1);
	p2 = getppid();
	printf("ppid = %d.\n", p2);

	return 0;
}

3.3、多进程调度原理
(1)操作系统同时运行多个进程
(2)宏观上的并行和微观上的串行
(3)实际上现代操作系统最小的调度单位是线程而不是进程

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值