Linux进程之-概念

dup2(oldfd, newfd)--> newfd指向oldfd的文件,dup用于复制。

1.了解进程的相关概念

2.掌握fork/getpid/getppid函数使用

3.掌握ps/kill命令使用

4.掌握execl/execlp函数的使用

5.什么是孤儿进程、僵尸进程

6.掌握wait函数使用

7.掌握waitpid函数的使用

1、进程相关概念

程序和进程:程序是指编译好的二进制文件,在磁盘上,不占用系统资源{CPU、内存、打开的文件、设备、锁....};进程,是一个抽象的概念,与操作系统原理联系紧密,进程是活跃的程序,占用系统资源,在内存中执行。(程序运行起来,产生一个进程)

简单来说:进程是运行的程序。从程序员的角度,是运行一系列指令的过程;从操作系统角度,进程是分配系统资源的基本单位。

区别:程序只占用磁盘空间,不占用系统资源;内存占用系统资源。程序没有生命周期,进程有生命周期。

进程状态:就绪、运行、挂起、终止。

进程控制块PCB:每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,linux内核的进程控制块是task_struct结构体。

/usr/src/linux-headers-4.15.0-122/include/linux$ gedit sched.h文件中可以查看该结构体的定义,重点包含:

  • 进程id:系统中每个进程有唯一的id,在C语言中pid_t类型表示,其实就是一个非负整数。
  • 进程切换时需要保存和恢复的一些cpu寄存器。
  • 描述虚拟地址空间的信息。
  • 描述控制终端的信息。
  • 当前工作目录
  • umask掩码
  • 文件描述符,包含很多指向file结构体的指针。
  • 和信号相关的信息。
  • 用户id和组id。
  • 会话session和进程组。
  • 进程可以使用的资源上限(Resource Limit)

2、环境变量

环境变量是指,在操作系统中用来指定操作系统运行环境的一些参数,通常具备以下特征:

  • 字符串(本质)
  • 有统一的格式:名=值[:值]
  • 值用来描述进程环境信息

存储形式:与命令行参数类似。char *[]数组,数组名environ,内部存储字符串,NULL作为哨兵结尾。

使用形式:与命令行参数类似。

加载位置:与命令行参数类似。位于用户区,高于stack的起始位置。

引入环境变量表:须声明环境变量,extern char ** envrion

---练习:打印当前进程的所有环境变量。

~$ env

PATH: 可执行文件的搜索路径。例如:ls命令也是一个程序,执行它不需要提供完整的路径名/bin/ls,然而,通常我们执行当前目录下的一个程序a.out却需要提供完整的路径名./a.out,这是因为PATH环境变量的值里包含了ls命令所在的目录/bin,却不包含a.out所在的目录。PATH环境变量的值可以多个目录,用 :号隔开,在shell中用echo命令可以查看这个环境变量的值。

~$ echo $PATH
/opt/ros/kinetic/bin:/home/chen/bin:/home/chen/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

SHELL:当前shell,它的值通常是/bin/bash。

3、getenv函数

功能:获取环境变量值。

char *getenv(const char *name); 成功,返回环境变量的值;失败,NULL(name不存在)。

---练习编程实现getenv函数

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

int main()
{
    printf("homepath is [%s]\n",getenv("HOME"));
    return 0;
}

~$ gcc 01_getenv.c
~$ ./a.out
homepath is [/home/chen]

4、setenv函数

功能:设置环境变量的值。

int setenv(const char *name, const char *value, int overwrite); 成功返回0,失败返回-1.

参数:overwrite取值:1,覆盖原环境变量;0,不覆盖(该参数常用于设置新环境变量,如:ABC = haha-day-night)

5、unsetenv函数

功能:删除环境变量name的定义

int unsetenv(const char *name); 成功,返回0;失败返回-1。

注意事项:name不存在仍返回0(成功),当name命名为"ABC ="时则会出错。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值