Linux学习笔记2:程序运行与系统管理命令

一、Linux多任务管理

对于熟悉windows和Linux桌面的初学者,在Linux命令行方式下体验多任务是一件有点尴尬的事情。因为传统的命令行方式,输入可执行文件的文件名可以启动一个程序。只要这个程序不结束,命令行就一直被占用,用户就无法启动另外一个需要执行的程序。而一般的Linux系统默认的桌面管理器都带有仿真终端,所以,用户要执行多个程序也可以打开多个仿真终端分别执行。不过这里要介绍的是在一个终端的环境下执行多个程序的方法。

1、通过命令行启动一个程序并在后台执行

将符号‘&’放在命令行的尾部,可以让某个程序在后台自动运行。例如,从根目录开始查找一个文件或压缩一个很大的目录。

[root@zinix-fedora /]# find / ls > /dev/null &
[1] 6557
[root@zinix-fedora /]# find: ‘/run/user/42/gvfs’: Permission denied
find: ‘ls’: No such file or directory

[1]+  退出 1                find / ls > /dev/null

jobs命令用于显示Linux中的任务列表及任务状态,包括后台运行的任务

[root@zinix-fedora /]# find / zinix > /dev/null &
[1] 6838
[root@zinix-fedora /]# find: ‘/run/user/42/gvfs’: Permission denied
job
bash: job: 未找到命令...
[1]+  退出 1                find / zinix > /dev/null
[1]+  退出 1                find / zinix > /dev/null

对于当前正在前台运行的程序,可以通过快捷键Ctrl+Z将程序暂停并放入后台,然后通过“bg %jobnumber”命令通知放在后台的任务继续运行。

通过fg命令可以将后台任务(在后台运行或者暂停的任务)放到前台终端运行

对于运行在后台的普通程序,如果当前用户终端关闭,则程序进程也会被关闭。为了能够让程序在后台继续运行,可以使用nohup这个命令,此时命令的所有输出都保存在nohup.out文件中。

运行在后台的任务无法直接用Ctrl+C杀死,如果需要结束运行,可以有两种方法:

  • 将任务切换到前台,用Ctrl+C杀死。
  • 执行“kill -9 %任务号”,结束后台任务。

二、Linux常用的进程管理命令

1、ps命令:查看进程的运行状态

ps命令非常复杂,如果不是学Linux的考古专业,一般的建议就是重点掌握“ps aux”、“ps ux”和“ps -l”这几个命令。

这里写图片描述

(1)ps -l:显示当前shell中正在执行的进程。具体的参数信息如下

  • F:代表进程的权限: 4 表示权限为 root ; 1表示此子程序仅进行复制(fork)而没有实际运行(exec)。
  • S:代表这个程序的状态 (STAT),主要的状态有:
    • R (Running):进程正在运行中
    • S (Sleep):进程处于睡眠状态(idle),但可以被唤醒(signal)
    • D :不可被唤醒的睡眠状态,通常可能在等待 I/O 的情况
    • T :停止状态(stop),可能是被Ctrl+Z暂停或Debug状态
    • Z (Zombie):僵尸进程(父进程先结束了)
  • UID:代表执行者身份
  • PID : 进程的ID号
  • PPID: 父进程的ID号
  • C:CPU 使用的资源百分比
  • PRI: 进程的执行优先级,值越小优先级越高
  • NI:进程的nice值,其表示进程可被执行的优先级的修正数值
  • ADDR:内核函数,指出该程序在内存的哪个部分,如果是个可执行的程序,一般就会显示 ‘-‘。
  • SZ:代表此进程用掉多少内存
  • WCHAN: 表示目前程序是否运行中,‘-’表示正在运行中
  • TTY:用户终端的位置
  • TIME:使用掉的 CPU 时间,是此程序实际花费 CPU 运行的时间,而不是系统时间;
  • CMD:触发此进程执行的命令

(2)ps ux:显示属于当前用户的所有进程

这里写图片描述

参数说明:

  • USER:进程所属的用户名
  • PID :进程ID
  • %CPU:进程使用掉的 CPU 资源百分比
  • %MEM:进程所占用的实体内存百分比
  • VSZ :进程使用掉的虚拟内存量 (Kbytes)
  • RSS :进程占用的固定的内存量 (Kbytes)
  • TTY :运行进程的终端,若与终端无关则显示 ?,另外, tty1-tty6 是本机上面的登陆者程序; pts/0 等,表示为由网络连接进主机的程序。
  • STAT:进程当前的状态,状态显示与 ps -l 的 S 标志相同 (R/S/T/Z)
  • START:进程被触发启动的时间
  • TIME :进程实际使用 CPU 运行的时间
  • COMMAND:触发此进程执行的命令

(3)ps aux:显示当前系统的所有进程

这里写图片描述

很显然,使用aux显示的内容对我们来说太多了,更多的时候,我们需要在这个命令中叠加其它参数,实现在全部进程信息中按条件过滤出我们需要的内容。

 ps aux --sort -pcpu # 按照CPU占用率排序
 ps aux --sort -pmem # 按照内存占用率排序
 ps aux --sort -pcpu,+pmem | head -n 10  # 同时按照CPU和内存占用率排序,并通过管道显示前10个结果
 watch -n 1 'ps aux --sort -pmem,+pcpu | head -n 20' # 按照CPU和内存占用率查询前20个进程,每秒刷新一次
 ps aux | grep 'zinix'    # 在全部进程信息中查找指定的字符串

这里写图片描述

(4)ps -L 进程ID;查询指定进程的全部线程

这里写图片描述

2、pstree命令:查看系统的进程关系树

这里写图片描述

3、top:实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器

这里写图片描述

  • 23:16:25:当前系统时间
  • up 1 day:系统运行时间,格式为时:分
  • 1 user:当前登录用户数
  • load average: 0.06, 0.60, 0.48:系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
  • total:进程总数
  • running:正在运行的进程数
  • sleeping:睡眠的进程数
  • stopped:停止的进程数
  • zombie:僵尸进程数
  • Cpu(s):
    • 0.3% us:用户空间占用CPU百分比
    • 1.0% sy:内核空间占用CPU百分比
    • 0.0% ni:用户进程空间内改变过优先级的进程占用CPU百分比
    • 98.7% id:空闲CPU百分比
    • 0.0% wa:IO等待占用CPU的百分比
    • 0.0%hi: 硬中断(Hardware IRQ)占用CPU的百分比
    • 0.0%si:软中断(Software Interrupts)占用CPU的百分比
    • 0.0%st:虚拟机占用百分比
  • Mem和Swap:这部分内容放在随后的free命令分析

4、free:查看系统内存的使用信息

这里写图片描述

这里是free命令对内存使用情况的统计结果,第一行Mem是对物理内存的统计,第二行Swap是对内存交换空间的统计。Swap内容比较简单,所以这里重点解释一下Mem的统计数据:

  • total:全部内存,3.7G
  • used:已使用的内存,0.9G
  • free:1.7G
  • share:2.5M
  • buff/cache:1.1G
  • available: 2.4G

total(3.7) = used(0.9)+free(1.7)+buff/cache(1.1),这个公式可以帮助我们明确几个观点:

  • used表示被内核和应用程序实际占用的物理内存
  • free表示当前系统中完全空闲的物理内存
  • Linux系统为例提升IO性能,会通过预申请一部分内存作为buff/cache(需要写入硬盘的数据为了提高写入性能,系统会先保存在buff中。需要从硬盘读取的文件,为了提高读取效率,文件会被保存在cache中)。
  • Linux系统为了性能总是优先使用内存,如果系统的IO请求持续增加,系统就会不断申请内存作为buff/cache。如果,用户进程不断增加,系统又会回收buff/cache。所以从应用程序的角度看: 可用内存=系统free+buffers+cached
  • 有些版本的Linux系统,free命令查询到的信息除了Mem和Swap外,还有一行-/+ buffers/cache,如果有这一行,此时Mem中的used就已经包括了buffers/cache这一部分。从应用程序的角度看,buffers/cache内存和free是一样的,都可以被应用程序申请使用,只是在应用程序未使用的情况下,被Linux系统拿去作为缓存提升IO性能了。

5、kill:给进程发送信号

kill命令和kill函数差不多,都是用于给指定的进程发送信号的。通常情况下,在命令行给进程发送信号的目的都是为了结束一个进程(例如,清理僵尸进程),具体命令如下:

kill -9 pid  # 9表示无条件终止,pid表示进程ID

另外,还可以查询系统定义的全部信号

kill -l

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值