Linux工具之htop(含移植到arm-linux系统)

news2024/12/23 12:42:15

文章目录

  • 介绍
  • 安装
  • 使用
    • 一些参数讲解
    • 功能键说明
    • 一些快捷键
    • 一些指令参数
  • 拓展:Linux进程PRI与NI值
  • 拓展:VIRT(虚拟内存)RES(常驻内存)和SHR(共享内存)
  • 拓展:编译成应用放到开发板上使用
    • 源码下载
    • 解压编译

介绍

Htop是一个免费的(GPL)基于NCourses的Linux进程查看器。它类似于top,但允许您垂直和水平滚动,因此您可以看到系统上运行的所有进程,以及它们的完整命令行,还可以将它们视为进程树,选择多个进程并同时对它们执行操作。与流程相关的任务(终止、重新冻结)可以在不输入PID的情况下,通过鼠标来完成。允许用户根据CPU,内存和时间间隔对进程进行排序。

安装

系统不会自带,若是Ubuntu,通过sudo apt指令可以下载,若是Centos, 通过yum 可以安装。

ubuntu系统

sudo apt install htop

使用

在这里插入图片描述

一些参数讲解

任务(tasks)是打开的进程总数的代表,但并不是每个打开的进程都在不断消耗CPU。 每个进程都处于几种状态

  • R: Running:表示进程(process)正在使用CPU

  • S: Sleeping: 通常进程在大多数时间都处于睡眠状态,并以固定的时间间隔执行小检查,或者等待用户输入后再返回运行状态。

  • T/S: Traced/Stoped: 表示进程正在处于暂停的状态

  • Z:Zombie or defunct:已完成执行但在进程表中仍具有条目的进程。

Load Average

  • 三个值是指系统在最后1分钟,最近5分钟和最后15分钟的平均负载 (0.56, 0.74, 0.74)

Uptime

  • 表示这个系统一共运行了多长的时间

PRI

  • 描述Linux内核查看的进程优先级

TIME+

  • 进程占用的CPU时长

Command

  • 它与每个进程并行显示完整的命令执行 (比如/usr/lib/R)

功能键说明

功能键功能说明
F1获取功能键命令帮助
F2设置区域二展示内容,可以设置颜色方案、列等等
F3搜索,可以搜索command列中的信息
F4过滤,可以过滤command列中匹配的进程
F5按照进程树样式展示
F6排序,根据选择的列排序
F7设置进程优先级,减小优先级
F8设置进程优先级,增加优先级
F9杀死进程,需要先选中进程,然后选择需要发送的信号量
F10退出

案例:

  • 按下F2,增加线程树的展示

在这里插入图片描述

  • 按下F6可以指定排序【注意:可以使用下面的快捷键进行设置】
    在这里插入图片描述

一些快捷键

  • u – 用于显示特定用户拥有的所有进程。

  • P –用于基于高CPU消耗对进程进行排序。

  • M –用于基于高内存消耗对进程进行排序。

  • T –用于根据时间段对过程进行排序。

  • h –用于打开帮助窗口并查看此处未提及的更多快捷方式。

一些指令参数

用法:htop [参数选项]

参数参数说明
-C、 --no-color使用单色配色方案
-d 、–delay=DELAY设置刷新间隔时间,单位十分之一秒
-h 、–help打印帮助信息
-s、 --sort-key=COLUMN按照指定列排序选择
-t、 --tree默认值,按照树结构视图显示
-u 、–user=USERNAME只显示指定用户进程信息
-p、 --pid=PID,[,PID,PID…]只显示指定pid进程信息
-v、 --version打印命令版本

拓展:Linux进程PRI与NI值

  1. PRI -> 进程的优先级,大部分系统(Linux、UCOSII)都是数字越低优先级越高,进程就优先运行 , Linux中的PRI(new) = PRI(old) + nice ,其中 , PRI(old)为系统算法决定 ,在创建时被赋予不同的值,用户不可修改 ,用户只能通过修改nice来修改进程的优先级

  2. NI -> nice , 进程优先级的修正量, -20 ~ 19 ,用户可修改 (root用户可修改nice值-20 ~ 19 ,普通用户只能修改nice值0~19 )。一般情况下,子进程继承父进程的nice值,由于init进程的nice值为0,所有大部分进程的nice值都为 0

  3. 用户可通过renice xx 进程号 的命令修改进程的优先级 ,其中xx为nice值,注:PRI(old)被系统保留 ,每执行一次renice xx 进程号命令,都是在PRI(old)基础上+nice值

拓展:VIRT(虚拟内存)RES(常驻内存)和SHR(共享内存)

VIRT:

  • 1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据,以及malloc、new分配的堆空间和分配的栈空间等;

  • 2、假如进程新申请10MB的内存,但实际只使用了1MB,那么它会增长10MB,而不是实际的1MB使用量。

  • 3、VIRT = SWAP + RES

RES:

  • 1、进程当前使用的内存大小,包括使用中的malloc、new分配的堆空间和分配的栈空间,但不包括swap out量;

  • 2、包含其他进程的共享;

  • 3、如果申请10MB的内存,实际使用1MB,它只增长1MB,与VIRT相反;

  • 4、关于库占用内存的情况,它只统计加载的库文件所占内存大小。

  • 5、RES = CODE + DATA

SHR:

  • 1、除了自身进程的共享内存,也包括其他进程的共享内存;

  • 2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小;

  • 3、计算某个进程所占的物理内存大小公式:RES – SHR;

  • 4、swap out后,它将会降下来。

参考博文:编写Linux C++程序如何影响VIRT(虚存)和RES(实存/常驻内存),讲解new分配的堆空间在使用和未使用情况下虚拟内存与常驻内存的差别等

拓展:编译成应用放到开发板上使用

linux主机:ubuntu-18.04

交叉编译器:arm-buildroot-linux-gnueabihf

开发板kernel:Linux 100ask 5.4.31 #1 SMP PREEMPT Thu Oct 27 11:04:26 UTC 2022 armv7l GNU/Linux

开发板:MarsBoard(imx6d)

源码下载

ubuntu@ubuntu: wget http://hisham.hm/htop/releases/1.0.1/htop-1.0.1.tar.gz #htop源码
ubuntu@ubuntu: wget http://ftp.gnu.org/gnu/ncurses/ncurses-5.9.tar.gz #ncurses源码

解压编译

tar xvzf ncurses-5.9.tar.gz
tar xvzf htop-1.0.1.tar.gz

由于htop依赖于ncurses库,因此需要先编译ncurses,进入ncurses目录,并配置交叉编译

进入ncurses-5.9目录下执行该命令添加环境变量

export CPPFLAGS="-P"

新建make.sh脚本,如果是编译到不同的平台要替换–host后面的交叉编译链工具

# /bin/sh
 
./configure --prefix=$PWD/install \
    --without-cxx --without-cxx-binding \
    --without-ada --without-manpages \
    --without-progs --without-tests \
    --with-shared --host=arm-buildroot-linux-gnueabihf
ubuntu@ubuntu: source make.sh
ubuntu@ubuntu: make -j4
ubuntu@ubuntu: make install

编译htop

进入htop-1.0.1目录下

新建make.sh脚本,新建的脚本需要应用编译好的ncurses库文件和头文件,请看make.sh脚本中的引用

# /bin/sh
 
LIBS=/home/book/Desktop/test/ncurses-5.9/install
 
./configure --prefix=$PWD/install --disable-unicode  --host=arm-none-linux-gnueabi \
    LDFLAGS=-L$LIBS/lib/ \
    CPPFLAGS="-I$LIBS/include/ncurses -I$LIBS/include/"
ubuntu@ubuntu: source make.sh
ubuntu@ubuntu: make -j4
ubuntu@ubuntu: make install

此时在/home/book/Desktop/test/htop-1.0.1/install/bin有编译好的可执行文件

查看文件的属性可以知道该文件运行在arm平台上
在这里插入图片描述
、、、未成功

参考博文:
arm-linux开发环境之(htop命令移植)
交叉编译HTOP并移植到ARM嵌入式Linux系统

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

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

相关文章

毕业2年,月薪就有30K,太卷了吧......

想起两年前交流过的一个应届生,当时他刚毕业技术水平不高,进了一个小公司做软件测试实习工作。最近联系上了,不问不知道,一问吓一跳,他现在已经进了某一线大厂,月薪30K。这位朋友其实也没比别人强多少&…

708教室使用方法

一、教室平面图 708教室的布局如下,重要的设备已经在图中标出。总开关、一体机和机柜。   二、使用方法 2.1 房间机器上电 进门后首先走到“总开关位置”,将电匝闭合。 原来的开关如图所示,有3组开关,1号组开关用于控制插座、…

小程序自动化测试

背景 近期团队打算做一个小程序自动化测试的工具,期望能够做到业务人员操作一遍小程序后,自动还原之前的操作路径,并且捕获操作过程中发生的异常,以此来判断这次发布是否会影响小程序的基础功能。 上述描述看似简单,…

为什么黑客要攻击你的网站?如何才能保护网站不被攻击?

根据2023年一季度应用程序安全状况报告所披露的报告,今年来全球已经累计有超过1400多万个网站遭受了超过10亿次网络攻击,网络的安全风险依然在逐年不断提升。 几乎每个网站都面临风险,无论是简单的博客论坛、投资平台、小型的独立电商网站还是…

无需服务器,5分钟在公众号中接入ChatGPT

前言 在原先使用openAI的接口分别实现过微信聊天,语音对话等功能的基础上,我又将矛头指向了公众号,最近在github中找到了一个挺好玩的案例:公众号机器人,于是打算分享一下整个搭建过程 准备工作 微信公众号AirCode账…

三、基尔霍夫定理

目录 基本概念 基尔霍夫电流定理(KCL) 基尔霍夫电压定理(KVL) 总结 基本概念 1.支路 定义1:电路中每一个两端元件就称为一条支路 定义2:电路中通过同一电流的分支 2.结点 定义1:元件的连接…

spring实例化bean之循环依赖

serviceA里注入了serviceB,serviceB里又注入了serviceA,这样在实例化serviceA时,在doCreateBean时的populateBean时会先实例化serviceB,然后实例化serviceB,在serviceB的doCreateBean方法的populateBean又会去找servci…

什么是Linux shell—一个简单的案例

一句话概括:简单来说脚本就是将需要执行的命令保存到文本中,按照顺序执行(由上往下执行),shell脚本:shell脚本就是一些命令的集合。 一、创建第一个Shell脚本:输出helloworld 1.脚本格式 脚本…

(转载)基于遗传模拟退火的聚类算法(matlab实现)

1 理论基础 1.1 模糊聚类分析 模糊聚类是目前知识发现以及模式识别等诸多领域中的重要研究分支之一。随着研究范围的拓展,不管是科学研究还是实际应用,都对聚类的结果从多方面提出了更高的要求。模糊C-均值聚类(FCM)是目前比较流行的一种聚类方法。该…

【不单调的代码】还在嫌弃Ubuntu终端?快来试试做些Ubuntu终端的花式玩法。

🎊专栏【​​​​​​​不单调的代码】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【Love Story】 🥰大一同学小吉,欢迎并且感谢大家指出我的问题🥰 注意: 本文是在…

【Protobuf速成指南】Protobuf快速上手

文章目录 1.0版本一、编写.proto文件1.文件规范:2.注释方式:3.指定proto3语法:4.package申明符5.定义message6.编写消息字段①类型对照表②唯一编号 二、编译.proto文件1. 编译指令2.源码分析 三、序列化和反序列化的使用四、小结 1.0版本 本…

TCP连接管理与UDP协议

一、TCP的连接管理 1.TCP包头 2.连接的建立——“三次握手” TCP 建立连接的过程叫做握手。 采用三报文握手:在客户和服务器之间交换三个 TCP 报文段,以防止已失效的连接请求报文段突然又传送到了,因而产生 TCP 连接建立错误。 3.连接的释放…

【智能座舱】— 看上海车展,高端品牌变局,时代变天早开始,40项智能化创新技术解密~

大家好,欢迎阅读本期文章,我们将带您解读一份极具实用价值的汽车研究报告。本期将聚焦于2023年上海车展,解密未来座舱发展技术脉络 在本期文章中,我们将深度探讨这些前沿技术的应用,为您呈现未来汽车的全景图。我们相信,这将有助于您更加准确地选择适合自己的新能源汽车…

Kafka测试实战:从基础入门到高阶技巧(建议收藏)

Kafka是一种高吞吐量的分布式发布-订阅消息系统,它可以处理所有活动流数据。在进行Kafka的测试时,我们需要验证生产者能否成功发送消息,消费者能否成功消费消息。在本文中,我们将使用Python来进行Kafka的测试,并提供从…

pytorch实战 -- 数据加载和处理

Pytorch提供了许多工具来简化和希望数据加载,使代码更具可读性。这里将专门讲述transforms数据预处理方法,即数据增强。 数据增强又称为数据增广、数据扩增,它是对训练集进行变换,使训练集更丰富,从而让模型更具泛化能…

POWERBUILDER中高级学习提纲

Chengg0769 2012年 版权来自于: www.mis2erp.com http://blog.csdn.net/chengg0769 http://www.haojiaocheng.cc 转载请保留以上信息 这个提纲的来由: 当时,有个朋友说因伤疗养,想从过去做维护变为做开发,想学习…

从裸机启动开始运行一个C++程序(四)

先序文章请看 从裸机启动开始运行一个C程序(三) 从裸机启动开始运行一个C程序(二) 从裸机启动开始运行一个C程序(一) 跳转 前面我们介绍过,8086CPU总是在执行CS:IP所对应的内存位置的指令&…

签章那些事 -- 让你全面了解签章的流程

前言 随着通信、互联网技术的发展,人们接触到的信息纷繁复杂,信息的真真假假让人难以辨认。在严肃性场合,比如电子合同、电子证照等,必须有一种手段确保信息的完整性和真实性,这时签章就派上了用场。 签章的技术原理并…

高频面试八股文用法篇(四) 乐观锁和悲观锁的例子

目录 什么是乐观锁和悲观锁 乐观锁的实现方式主要有两种:CAS机制和版本号机制 1)CAS(Compare And Swap) (2)版本号 乐观锁适用场景 乐观锁和悲观锁优缺点 功能限制 竞争激烈程度 什么是乐观锁和悲观锁 乐观锁&#xff1…

录音软件哪个好用?录音软件免费下载安装

案例:有没有好用的录音软件推荐? 【我想录制电脑上的音乐和音频会议,也想用电脑录制自己的歌声,有没有好用的电脑录音软件推荐?】 在日常生活和工作中,我们经常会遇到需要录音的场景,比如会议…