看似都能分的清清楚楚,但说起来却有点模糊,这篇文章将轻松搞懂Linux中程序、命令、进程、服务的区别
文章目录
1. 概念区分
1.1. 程序
这里的程序主要指应用程序,编写好的一段代码,这里介绍程序,主要是为了后面和进程做区分。
1.2.进程
操作系统最核心的概念就是进程。其实进程简单来说就是在操作系统中运行的程序,它是操作系统资源管理的最小单位。但是进程是一个动态的实体,它是程序的一次执行过程。
进程和程序的区别在于:
- 进程是动态的,程序是静态的,进程是运行中的程序;
- 而程序是一些保存在硬盘上的可执行代码。
1.3.服务
Linux中的服务一般都是常见的,一直在运行的命令,其独立于控制终端,不受前台和终端的控制,在后台周期性地执行某种任务或等待处理某些发生的事件。运行服务的进程通常被成为后台进程(守护进程)。服务由service启动,并配置。使用上通常由systemctl命令进行控制。
2.相关命令
2.1 进程
1. ps:查询进程
Linux ps (英文全拼:process status)命令用于显示当前进程的状态。
语法
ps [options] [--help]
参数:
- ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
- -A 列出所有的进程
- -w 显示加宽可以显示较多的资讯
- -au 显示较详细的资讯
- -aux 显示所有包含其他使用者的行程
这里使用最多的就是
ps -aux
输出格式:
输出内容字段:
- USER: 进程拥有者
- PID: pid
- %CPU: 占用的 CPU 使用率
- %MEM: 占用的记忆体使用率
- VSZ: 占用的虚拟记忆体大小(virtual)
- RSS: 占用的记忆体大小(true)
- TTY: 终端的次要装置号码 (minor device number of tty)
- STAT: 该行程的状态:
- D: 无法中断的休眠状态 (通常 IO 的进程)
- R: 正在执行中
- S: 静止状态
- T: 暂停执行
- Z: 不存在但暂时无法消除(僵尸状态)
- W: 没有足够的记忆体分页可分配
- <: 高优先序的行程
- N: 低优先序的行程
- L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
- START: 行程开始时间
- TIME: 执行的时间
- COMMAND:所执行的指令
2.pstree
将所有行程以树状图显示,树状图将会以 pid (如果有指定) 或是以 init 这个基本行程为根 (root),如果有指定使用者 id,则树状图会只显示该使用者所拥有的行程。
pstree -u #显示各进程的user用户拥有者
pstree -p #显示各进程的pid
3.top
用于实时显示 process (进程)的动态。
和ps相比,最主要的区别就在于能够实时更新进程状态信息(默认每3秒更新一次)。
语法:
top [-] [d] [p] [q] [c] [C] [S] [s] [n]
参数说明:
- d:指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
- p:通过指定监控进程ID来仅仅监控某个进程的状态。
- q:该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
- S:指定累计模式。
- s:使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
- i:使top不显示任何闲置或者僵死进程。
- c:显示整个命令行而不只是显示命令名。
top输出格式:
具体解析,详见:https://www.cnblogs.com/niuben/p/12017242.html
交互指令:
交互指令是在在通过top指令进入后,输入的操作指令:
- p 以CPU使用率排序(默认)
- M 以内存使用率排序
- N 以PID排序
- q 退出
案例
- 监视特定用户:在top页面下,输入“u”,再输入用户名
- 终止指定进程:在top页面先,输入“k”,再输入要结束的进程ID号
4.kill,killall :终止进程
- kill [选项] 进程号(功能描述:通过进程号杀死进程 -9 强制终止)
- killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
2.2 服务
1.service
服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql , sshd 防火墙iptables等),因此我们又称为守护进程,是 Linux 中非常重要的知识点。
service 管理指令:
- service 服务名 [start | stop | restart | reload | status]
- 在 CentOS7.0 后 不再使用 service ,而是 systemctl
示例:Service iptables status
2. chkconfig :查看/设置服务运行状态级别
- 查询所有服务:chkconfig --list
- 查看特定服务运行级别/运行状态(以sshd为例):
- chkconfig sshd --list
- chkconfig --list | grep sshd
- 设置某个服务在某个运行状态下是否自启动
- chkconfi --level 运行级别(0-6) on/off