Linux进程(二)

简介: Linux进程

进程优先级


基本概念


CPU资源分配的先后顺序就是进程的优先权,优先权存在的原因是因为CPU资源有限,


查看系统进程


83d630357e70b1a1ed50036ede4bc00e_419f3be12c15436a89a868f014c3404a.png


  1. UID:执行者身份
  2. PID:进程代号
  3. PPID:父进程代号
  4. PRI:进程的优先级,值越小优先级越高
  5. NI:进程的nice值

PRI && NI


PRI,是进程的优先级,其值越小进程的优先级越高;NI,nice值,表示进程优先级的修正数值;PRI值越小越先被执行,加入NI之后,PRI(new)=PRI(old)+nice,PRI(old)值为80;调整优先级的也就是调整nice值;nice的取值范围是(-20,19)


top命令更改已存在进程的nice


  1. sudo top
  2. r->输入PID->输入待修改的nice值


将nice修改为-10,结果如下


316baae7d4ca25e54b7bee2bf89dc2bb_99b2264f1eaa40de8e21de0e700be0fe.png


其他概念


竞争性:系统进程数目众多,而CPU只有少量,甚至1个,所以进程之间具有竞争性;为了高效完成任务,更合理地竞争相关资源,便具有了优先级

独立性:多进程运行,需要独享各种资源,多进程运行期间互不干扰

并行:多个进程在多个CPU下,同时进行运行,称之为并行

并发:多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发


环境变量


基本概念


环境变量,操作系统为了满足不同的应用环境,而预先在系统内设置了一大批全局变量,这些变量在整个系统中可以被其他进程访问


环境变量是指在操作系统中用来指定操作系统运行环境的参数,通常具有特殊用途,在系统中具有全局特性


如果要执行一个程序或指令,需要先找到,然后再执行


举个栗子:


aa91b607bcf4acfac294e1acf5129d7b_4a021631fd394ceb9e89fc2bec006b2a.png


执行mytest.c,需要先进行make指令,然后在当前的目录中执行程序


5ce50ba6420148e97fad9e3facb4f97c_aec3a1ea284c4c10afa6c58964fc07f9.png

8746297b6be3d6aed9285ed715210f45_83c3f5de7e784b3eb8044118dd8d678c.png


从上面的指令行中会发现一个疑问:为什么在最后执行程序时,是./后加路径;而在执行ll指令时前面却什么都不加,并且二者都是可执行程序,这是为什么呢???


Linux操作系统安装指令的路径中所包含的指令,一般是在默认搜索路径下进行的,默认情况下不需要加任何有关路径; ./代表当前路径,是为了让系统找到程序,并执行它


可以将./test指令也放到系统安装指令中,这样其也会变成默认的

sudo cp 指令 /usr/bin


d72f68c7a32e0a7eeb87d37982e32c5a_e2b22170c638430bade7516be669f6dc.png


通常不建议这样操作,可能会污染系统的指令池


建议采取环境变量PATH的方式,系统之所以可以找到指令,是因为PATH是系统的命令搜索路径:


6c51efd17fbb98f41bfcba5057afa4c2_6790b00f7c4e404ea5061edbe262c184.png


每个:之间的是系统默认的搜索路径,指令会先在第一条路径中寻找,找不到换下一条路径,依次类推


将指令放到默认搜索路径中: export PATH=$PATH:指令所在路径


04b176ea61c0fa7434f1986e5192de08_5c4a58990a854c30b720b68a8c214f52.png


常见环境变量


PATH:指定命令的搜索路径

55e480f9b44df068708a3de5c15d237e_6d159eaa4d1e4d90921c9a6fcc943381.png

上面便是系统默认的搜索路径


HOME:指定用户的工作目录(登录Linux时默认的目录)


415941974c3a56402181ae97406e6f08_088f7486584e4455afa06526c37904e5.png


USER:标识当前Linux用户

4c16785e7b2841750a3603ef39ea18ea_c45fcb6a48ac4f66a8522fe91a798004.png

这里通过指令来获取的Linux用户,接下来尝试使用函数来获取Linux用户

char *getenv(const char *name);

13720b3c5e66dc457d017f0225b361a0_a7cfb30a1fb441eca3f5616d2f7e73fa.png

该函数可以搜索环境变量,返回指向变量的指针

6fcf48146d8e83ed394e9b0e339b7d1b_483410db9fc042049de5e21fd190c355.png

3af93ef9a959218d0fe95e1703523ab3_33bb1dac079e4426b637d316b0a2f043.png

USER最大的意义是:可以表示当前Linux的使用用户;将上面的代码进行修改,进一步体现USER的意义


4ad7b427621f025593b85271b75c7124_302b6dbad90642be9ac111759e692ec7.png

8c4971314568d9760f4b6ac4a0ac4b8a_0bdd3b9dff2f4ba4802994462e010050.png


程序本身就是进程,mycmd也会变成进程并且是程序的子进程;环境变量具有全局属性,所以mycmd会继承USER的属性


SHELL:命令行解释器,当前shell,值为 /bin/bash


环境变量相关命令


echo:显示环境变量值

export:设置新的环境变量

env:显示所有环境变量

unser:清除环境变量

set:显示本地定义的shell变量和环境变量


查看环境变量


指令获取


echo $name //name 环境变量名称


eb6bd879b5d1a043d14d20184eae4a46_808cc9d707024f2db46930dd0e9e082e.png


为什么同样是显示环境变量,第一个可以,第二个却不行呢???

其实是因为,val并不是环境变量,而是本地变量,所以第二个并不会打印;也可以采用上面指令的方式进行验证


0d1e59e26fb600c3fdfdc727fce44d39_92d7560fce4c4881ac2536afe5281071.png

aa85465b39b8593e244f55476c8a105a_120ef51b9fd94434851d681ebf07201d.png


既然val不是环境变量,那就将其转化为环境变量;export val


f378de785a93ada5fbea493f55d6cfcf_3268a30e2e03495eaf070060e9f0d33a.png


./mycmd,就是进程;bash就是一个系统进程, ./mycmd也就是它的子进程,由于环境变量具有全局性,也就继承了bash的环境变量

val=1,本质是本地变量,只能在当前进程内有效


环境变量的组织方式


4b0f8891a4bf05ab9b24ada912033afa_8bed1f321e2141c19be9783edaa9bf88.png


命令行参数


cce8351bee84b7f5a86e51c6aa9d0eeb_5dd0e295fb5f44bf953040f3f6d2faf7.png

36f720b06a57a2f5e1a8289a58d835fa_3728f18ca0694f758f106b60cdfbb2b0.png

argc表示命令行中指令的个数;char *argv[]是指针数组,用来指向命令行中的数组


0a44beec18bdd59654dba9570dce83e3_2f2711dd17e84d5fba19bc3b854fe76a.png


对代码进一步更改


4f230196a5ae5c8c21f18aea7877c86d_80679f668aa74a81aaa43c5c8288619f.png3eee930d95ca1d6425ea9a4c4f1eba47_2bf9259094f64e46a699d6d70fa2ff40.png


再次观察是不是与指令后加选项一模一样,本质上就是这样的


通过代码获取环境变量


采用命令行方式获取环境变量


cb4fb73395e21af36293633e9c7782f2_19d9239b50834e32a8400540d47bcdac.png


这里的 char*env[]指针数组指向的不是命令行,反而是系统中的环境变量,通过指针可以将全部环境变量打印出来

结果如下:

b4186c295df98eca065be483693cfbcc_5bbe9c054f0b4f599f18eac39130cf05.png


相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
2月前
|
资源调度 Linux 调度
Linux c/c++之进程基础
这篇文章主要介绍了Linux下C/C++进程的基本概念、组成、模式、运行和状态,以及如何使用系统调用创建和管理进程。
39 0
|
4月前
|
网络协议 Linux
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
684 2
|
4月前
|
Linux Python
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
72 2
|
25天前
|
缓存 监控 Linux
linux进程管理万字详解!!!
本文档介绍了Linux系统中进程管理、系统负载监控、内存监控和磁盘监控的基本概念和常用命令。主要内容包括: 1. **进程管理**: - **进程介绍**:程序与进程的关系、进程的生命周期、查看进程号和父进程号的方法。 - **进程监控命令**:`ps`、`pstree`、`pidof`、`top`、`htop`、`lsof`等命令的使用方法和案例。 - **进程管理命令**:控制信号、`kill`、`pkill`、`killall`、前台和后台运行、`screen`、`nohup`等命令的使用方法和案例。
96 4
linux进程管理万字详解!!!
|
16天前
|
存储 运维 监控
深入Linux基础:文件系统与进程管理详解
深入Linux基础:文件系统与进程管理详解
58 8
|
13天前
|
Linux
如何在 Linux 系统中查看进程占用的内存?
如何在 Linux 系统中查看进程占用的内存?
|
25天前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
66 4
|
26天前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
27天前
|
消息中间件 存储 Linux
|
2月前
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
48 1