进程优先级、环境变量

211 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 11 天,点击查看活动详情


孤儿进程

父进程创建了一个子进程,如果父进程提前退出,那么子进程就被称为孤儿进程。 孤儿进程被1号init进程领养,此时就会观察到该进程的父进程就是1号进程。 为什么要被领养? 未来子进程退出的时候,父进程早已不在,需要领养进程来进行回收

进程的优先级

为什么要有优先级? 因为cpu的资源有限!进程太多,需要通过某种方式竞争资源 什么是优先级? 确认是谁应该先获得某种资源,谁后获得资源

linux下的优先级

优先级=老的优先级+nice值 image.png 当我们修改nice值的时候,老的优先级都是从80开始进行修改的 nice可以修改的范围-20~19 修改:top命令,然后按r,输入进程id,然后输入要修改的nice的值,不能修改的话,可以提升一下权限。

上下文数据

如果进程A正在被运行,那么cpu内的寄存器里面一定保存的是进程A的临时数据! 而这个保存的临时数据就叫做A的上下文。 上下文数据是不可以被丢弃的。 当进程a暂时被迫下来的时候,需要进程a顺便带着自己的上下文数据。 带着暂时保存的目的:为了下次运行的时候,能恢复上去,就能继续按照之前的逻辑继续向后运行,就如同没有中断过一样。

环境变量

初始: 1.系统命令可以直接运行,我自己写的程序必须要带路径!,如果不想带呢?如果我想让我们的程序和运行的普通命令一样,该怎么样呢? 当我们运行程序的时候,都是从环境变量中里面的路径找。 常见的环境变量:

  • **PATH: **指定命令的搜索路径
  • HOME:指定用户的主工作目录(即用户登录到Linux中时,默认的目录)
  • SHELL:当前Shell,它的值通常是/bin/bash

查看环境变量:echo $PATH 改变环境变量,在里面添加一个你写的程序的路径 export PATH=$PATH:路径,$PATH这个原来老的路径,路径都是用:进行分割的。 env显示的是所以的环境变量


如何通过代码获取环境变量:

  • main函数中最多有3个变量,

int main(int argc, char *argv[], char *env[]) image.png 前两个变量为命令行参数,最后一个参数为环境变量参数

  • 用全局的变量environ获取
  • getenv获取,用man查看它是怎么用的

进程的环境变量是怎么来的呢?从父进程继承而来,如果一路往上追,就到了bash 验证:给bash增加一个环境变量,子进程就会继承到该环境变量。同时也说明了环境变量具有全局属性,可以被所有进程继承。 命令行上可以设置两种环境变量——一种是局部的ml=666,一种是全局的export ml=666 image.png 有命令行参数的目的是同一个程序用不同的参数有会有不同的效果