Linux系列学习(三) - 进程和库文件

news2024/10/7 18:20:11

目录

引言:

学习:

基本命令补充:

wc命令:

more命令:

less命令: 

cat

ps命令:

kill命令: 

bg命令:

fg命令:

查看系统运行级别:

库文件:

什么是库?

讨论静态库和动态库的区别:

Linux中的进程:


引言:

Linux学习目录:

Linux系列学习 (一) - Linux的系统安装(MacOS)、文件系统、基本命令

Linux系列学习(二) - Vim编辑器的介绍及使用、文件编译的过程、Makefile工具、Gdb调试器

在上篇文章中我们补充了一些Linux系统的基本命令,并对Vim编辑器进行了简单的配置及使用,同时我们也对文件的编译和链接进行了了解并使用makefile对多个工程文件进行了管理,我们还安装了Linux中的Gdb调试器,在这一讲中,我们来简单了解Linux中的进程,并介绍Linux中的进程管理命令。

学习:

基本命令补充:

wc命令:

wc -w命令用于统计文本文件中单词出现的次数,w也就是word的意思,例如我要统计test1024.c文件中有多少个单词,输入命令:

wc -w test1104.c

如图:

如图,我通过命令统计出了文件中共有5个单词。

wc -c命令用于统计出文本文件中字符的个数,例如我现在要统计test1104.c文件中字符的个数,输入命令:

wc -c test1104.c

如图:

如图,我通过命令统计出了文件中一共有18个字符。 

wc -l命令用于统计出文本文件中一共有几行数据,l代表的意思是line也就是行的意思,例如我现在要统计test1104.c文件中有几行数据,输入命令:

wc -l test1104.c

如图:

more命令:

more本身相当于是一个文本文件的查看器,一般用于显示文件内容。当一个文件的内容超过一个屏幕能显示的行数的时候,使用more命令可以分屏显示文件的内容。例如我现在要查看/usr/local/include/c++/12路径下的stdlib.h文件中的内容,输入命令:

more stdlib.h

如图:

less命令: 

less命令也是一个文本内容查看器,查看文本内容,但是并不会显示到界面上,例如我现在要查看Desttop/test路径下的test1104.c文件,输入命令:

less test1104.c

如图:

注:当我们使用less命令时,我们是不能进行编辑和插入操作的,仅仅是查看作用。

cat

ps命令:

ps命令的功能为默认显示与当前终端有关的进程信息,ps命令也有多个后缀分别对应不同的功能。

-e 显示系统中所有的进程信息

-f 显示更多的进程属性信息(全格式)

-L 显示当前终端上的进程信息,线程 LWP信息

例如我现在在终端中输入一个sleep命令,并将sleep命令所要执行的操作转入后台:

如图,sleep进程成功添加,并在5秒后完成。

例如我在这里输入ps -ef命令,我们对命令显示的信息进行分析:

如图,这里一共有8个参数,分别是:UID、PID、PPID、C、STIME、TTY、TIME、CMD

在这里UID代表的是执行该进程的用户ID

PID代表的是进程号,进程号:一个进程与唯一的号码对应。

PPID代表的是父进程的ID号,P代表的就是parent,也就是父进程的进程号。

C代表的是CPU的使用率

STIME代表的是进程启动时间

TTY代表的是种端是哪个,那么此处TTY的下方为什么都是问号呢?

如果进程的运行和终端是无关的,这是就显示?

Time代表的是进程运行的时间。

CMD代表的是进城启动时使用到的命令。

& 后台运行程序

启动程序:./main ->路径 + 可执行程序 默认执行前台

./main & -> 后台运行进程

 前台程序和后台程序 模式切换

[1]代表

5095代表进程号

kill命令: 

kill命令用于杀死进程,但是杀死进程我们需要知道这个进程的进程号(pid)。

kill pid 用于结束当前进程

kill -9 pid 强制结束

kill -STOP pid 挂起进程

例如我在这里创建一个在后台执行的sleep,执行时间为500s,当我们不想等待这500s我们直接是用kill命令将这个进程杀死:

如图成功创建进程,进程号为5188。

如图,成功杀死睡眠500s的进程。

注 : 被挂起的程序或进程无法被普通的kill命令杀死,需要添加后缀-9 才能强制杀死。

例如我输入命令 kill -STOP 将刚刚创建的sleep进程挂起,然后使用kill命令试图杀死该进程,当我们执行完kill命令之后再次使用ps命令对进程列表进行查看时发现sleep进程依旧存在:

此时我们使用kill -9 + pid命令,强制杀死该进程,如图:

如图,被挂起的sleep进程被成功强制杀死。

bg命令:

bg命令用于将进程或挂起程序调到后台执行。

在bg命令后面添加上参数1,可以唤醒被挂起的程序。

fg命令:

fg命令用于将后台进程掉到前台执行。

查看系统运行级别:

一共有6个级别;

0        关机

1        单用户级别

2        多用户无网络级别

3        多用户文本界面

4        无定义、自定义界面

5        图形化界面

6        重启

runlevel命令用于查看系统的运行级别。

例如在这里我在终端中输入命令:runlevel

库文件:

什么是库?

库文件时计算机上的一类文件,提供给使用者一些开箱即用的变量。函数或类,库文件分为静态库和动态库,静态库和动态库的区别体现在程序的链接阶段。

一般来说,Windows的静态库文件扩展名时.lib,动态库文件扩展名时dll(Dynamic-Link Librarires),举一个例子:

我们在早期的Windows版本中玩单机游戏时,有时我们会遇到一些比较麻烦的问题,例如在启动游戏时操作系统提示你现在缺少了某个dll文件。

例如我在高中时期非常喜欢玩卡普空的鬼泣系列,曾经在win10系统上启动新dmc游戏时,就遇到过这种问题:

看,这就是一种典型的Windows动态库文件缺失的问题,还记得我当时为了玩上鬼泣这个游戏,就在脚本之家这个网站上找这个动态库文件,然后将这个文件添加到指定路径下,直到系统识别成功,游戏才能进去。

在Linux中,静态库的扩展名时.a,动态库的扩展名是.so(Shared Object)。内容一样,都是将函数封装在一起便以后供给他人调用。这样做的好处就在于编译后的库文件看不到源代码,是有保密作用的。

库是一组预先变异好的方法的集合。Linux系统存储的库的位置一般在:/lib或/usr/include下或其子目录下。Linux库有两种,一种是静态库,命令规则为libxxx.a,一种是共享库,其命令规则是libxxx.so。

静态库和动态库。

例如我们在写C程序时必须要加的头文件:#include<stdio.h>

头文件中存放函数声明。函数的定义封装库文件

动态库(共享库):格式必须是 lib***.a

我们在这里举一个创建静态库的例子:

Step 1 : add.c  mul.c 编译 add.o mul.o

Step 2 : 创建静态库:

ar crv libfoo.a add.o mul.o

Step 3 : 使用静态库

静态库链接特点: 每一个程序 静态链接库文件,生成的可执行文件都有一份副本

第一种方法:

动态库(共享库) 格式必须是:lib***.so

Step 1 : .c编译生成 .o文件

Step 2 : 生成共享库文件

Step 3 :共享库的使用

第二种方法:

修改环境变量,上的动态链接路径由原来的/usr/lib或/lib 修改为自定义路径

命令:

export LD_LIBRARY_PATH=.(当前路径)

gcc -o main main.c -L. -lfoo

默认使用动态库(当前路经,前提修改系统路径)是当前路径下的,否则若不需改系统配置,方法实用不通过,需要移动动态库至/usr/lib

ls -l查看动态库文件链接生成的可执行程序 大小 < 静态库文件

删除环境变量:

unset LD_LIBRARY_PATA

讨论静态库和动态库的区别:

静态库在链接时将用到的方法包含到最终生成的可执行程序中,而动态库(共享库)不包含,制作表计,在运行程序时,才动态加载,所以动态库体积小。

静态库就是在编译过程中一些目标文件的集合。静态库在程序链接的时候使用,链接器会将程序中国呢使用到的函数的代码从库文件中拷贝到应用程序中。一旦链接完成,在执行程序的时候就不需要静态库了。

由于每个使用静态库的应用程序都需要拷贝所用函数的代码,所以静态链接的文件会比较大。

相对于静态函数库,动态函数库在编译的时候

Linux中的进程:

进程:就是一个正在运行的程序。

这里有一个公式能帮助我们更好的理解进程:

进程 = 程序 + 数据 + PCB

那么PCB又为何物呢?

PCB : 即是进程控制块(Processing Control Block),是进程存在的唯一标志。用来描述进程的属性信息。OS就是根据PCB来对并发执行的进程进行控制和管理的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/390575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

unity UGUI系统梳理 - 常用可视化控件

作为一名合格的UI仔>.<&#xff0c;我发现很多UI很久没有使用了&#xff0c;所以我决定做一个UGUI系列博客重新梳理一下 1、Image 在没有放入图片下&#xff0c;image控件长这样 注意 我一般没交互需求的情况下都会把RaycastTarget给点掉&#xff0c;这个不单单是从提…

CAPL脚本DBLookup函数动态访问CAN 报文的属性

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

学习周报3.5

文章目录前言文献阅读摘要介绍方法总结相关性总结前言 本周阅读文献《Multi-step ahead probabilistic forecasting of multiple hydrological》&#xff0c;文献主要提出一种基于三维卷积神经网络、卷积最小门记忆神经网络和变分贝叶斯神经网络的混合深度学习模型&#xff08…

【博学谷学习记录】超强总结,用心分享|狂野大数据课程【Spark SQL函数定义】的总结分析

5.1 如何使用窗口函数 回顾: 窗口函数格式:分析函数 over(partition by xxx order by xxx [asc|desc] [rows between xxx and xxx])学习的相关分析函数有那些? 第一类: row_number() rank() dense_rank() ntile()第二类: 和聚合函数组合使用 sum() avg() max() min() count…

西电软件体系结构核心考点汇总(期末真题+核心考点)

文章目录前言一、历年真题二、核心考点汇总2.1 什么是软件体系架构?(软件体系结构的定义)2.2 架构风格优缺点2.3 质量属性2.4 质量评估前言 主要针对西安电子科技大学《软件体系结构》的核心考点进行汇总。 【期末期间总结资料如下】 针对西电计科院软件工程专业大三《软件体…

【QT】使用QML构建一个简易的计算器界面(三)

前面两篇对计算器界面的布局和显示以及实现功能做了相关优化&#xff0c;但是对输入显示那一块还没有具体的处理步骤&#xff0c;包括对输入表达式的合法性检查&#xff0c;显示框的多行历史显示等功能还需要添加&#xff0c;接下来将从这几个方面对这些功能进行添加。 1、对输…

概率论 1.3 古典概型与几何概型

1.3.1 排列与组合排列从n个不同元素任取r(r<n)个元素排成一列(考虑元素出现的先后次序)&#xff0c;称此为一个排列&#xff0c;此种排列的总数为n(n-1)....(n-r1)n!/(n-r)&#xff01;&#xff0c;若rn,则称为全排列&#xff0c;2.重复排列从n个不同元素中每次取出一个,放回…

GPIO输入和输出以及八种工作模式

一.GPIO的简介 GPIO &#xff08;general purpose input output&#xff09;是通用输入输出端口的简称&#xff0c;简单来说就是软件可控制的引脚&#xff0c;STM32芯片的GPIO引脚与外部传感器连接起来&#xff0c;从而实现与外部通讯、控制以及数据采集的功能。 1.引脚全是GP…

[2.1.1]进程管理——进程的概念、组成、特征

文章目录第二章 进程管理进程的概念、组成、特征&#xff08;一&#xff09;进程的概念&#xff08;二&#xff09;进程的组成——PCB&#xff08;三&#xff09;进程的组成——程序段、数据段补充&#xff1a;程序是如何运行的&#xff1f;&#xff08;四&#xff09;进程的特…

vue3 插槽使用详解

目录1 前言2 插槽的使用2.1 基本使用2.2 具名插槽2.3 动态插槽名2.4 插槽传值3 总结1 前言 Vue 实现了一套内容分发的 API&#xff0c;将 <slot> 元素作为承载分发内容的出口&#xff0c;使用插槽使得vue组件的设计更加灵活。 在vue版本更迭中&#xff0c;尽管插槽的使…

常用的设计模式之一(创建型模式)

设计模式可分为三大类&#xff1a; 创建型模式 (Creational Patterns)结构性模式 (Structural Patterns)行为型模式 (Behavioral Patterns) 模式描述包括创建型模式工厂模式&#xff08;Factory Pattern&#xff09; 抽象工厂模式&#xff08;Abstract Factory Pattern&#…

并发编程——可见性与有序性

如果有兴趣了解更多相关内容&#xff0c;欢迎来我的个人网站看看&#xff1a;耶瞳空间 JMM即Java Memory Model&#xff0c;它定义了主存、工作内存抽象概念&#xff0c;底层对应着CPU寄存器、缓存、硬件内存、CPU指令优化等。JMM体现在以下几个方面&#xff1a; 原子性&…

Web API

DOM API 1、选中页面元素 let elem document.querySelector(CSS选择器); console.log(elem); console.dir(elem); 2、事件 鼠标点击事件 onclick 鼠标移动事件 onmousemove 等等 事件源 .box&#xff0c;事件类型 onlick&#xff0c;事件处理方式 alert(hello) let d…

[Mybatis1]介绍与快速入门

文章目录 Mybatis概述 持久层 框架 Mybatis与JDBC对比 JDBC代码的缺陷 Mybatis简化JDBC Mybatis快速入门案例 整体案例项目结构 1.创建user表&#xff0c;添加数据 2.创建Maven项目&#xff0c;导入坐标 3.编写Mybatis核心配置文件 4.编写数据库返回对象的实体类 5. 编写S…

QML Button详解

1.Button简介 Button表示用户可以按下或单击的按钮控件。按钮通常用于执行一个动作&#xff0c;或回答一个问题。典型的按钮有确定、应用、取消、关闭、是、否和帮助。 Button继承自AbstractButton&#xff0c;提供了以下几种信号。 void canceled() //当按…

Python笔记 -- 列表

文章目录1、列表简介2、修改、添加、删除元素2.1、添加2.2、删除3、排序、倒序4、遍历列表5、创建数值列表6、列表切片7、列表复制8、元组1、列表简介 在Python中用方括号[]表示列表&#xff0c;用逗号隔开表示其元素 通过索引访问列表 names [aa,bb,cc,dd]print(names[0]) …

游戏项目中的程序化生成(PCG):算法之外的问题与问题

本篇讨论的是什么 从概念上讲&#xff0c;PCG&#xff08;程序化生成&#xff09;的含义很广&#xff1a;任何通过规则计算得到的内容&#xff0c;都可算作是PCG。但在很多游戏项目的资料&#xff0c;包括本篇&#xff0c;讨论PCG时特指是&#xff1a;用一些算法/工具(特别是H…

C语言-基础了解-13-C enum枚举

C enum枚举 一、C枚举 枚举是 C 语言中的一种基本数据类型&#xff0c;用于定义一组具有离散值的常量。&#xff0c;它可以让数据更简洁&#xff0c;更易读。 枚举类型通常用于为程序中的一组相关的常量取名字&#xff0c;以便于程序的可读性和维护性。 定义一个枚举类型&a…

3.2 LED闪烁流水灯蜂鸣器

LED闪烁1.1 电路连接示意图LED采用低电平点亮的方式&#xff0c;利用ST-Link的3.3V进行供电。1.2程序设计1.21知识储备GPIO配置步骤步骤&#xff1a;1. 第⼀步&#xff0c;使⽤RCC开启GPIO的时钟2. 第⼆步&#xff0c;使⽤GPIO_Init()函数初始化GPIO3. 第三步&#xff0c;使⽤输…

JavaWeb--会话技术

会话技术1 会话跟踪技术的概述2 Cookie2.1 Cookie的基本使用2.2 Cookie的原理分析2.3 Cookie的使用细节2.3.1 Cookie的存活时间2.3.2 Cookie存储中文3 Session3.1 Session的基本使用3.2 Session的原理分析3.3 Session的使用细节3.3.1 Session钝化与活化3.3.2 Session销毁目标 理…