Linux平台进程管理、作业管理以及相关命令解析

一些概念整理

https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/content/139.html

首先我们要清楚,进程管理为内核的功用之一,程序的执行与否与权限及其属性有关。程序(program)为存储在硬盘上的二进制文件,装载进内存之后即为进程(process)同时获得一个 PID,进程为程序运行的实例。Linux 内核存储进程信息的固定格式为 task struct,多个任务的 task struct 组成的链表则称为 task list。

我们登录系统并获得一个 shell,此时你的 bash 进程将获得一个 PID 号码,以标记其在内存的位置。而后我们再通过这个 bash 提供的接口来执行接下来的命令,后一个进程则为子进程,登录的 bash 则成为父进程,通过 Parent PID (PPID)即可得知其父进程的 PID 号码。

# 先执行一次 bash 命令,而后再 ps -l 命令以查看 PID 与 PPID 信息

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  1656  1648  0  80   0 - 29042 do_wai pts/0    00:00:00 bash
4 S     0  1917  1656  0  80   0 - 29076 do_wai pts/0    00:00:00 bash
0 R     0  1985  1917  0  80   0 - 37235 -      pts/0    00:00:00 ps
# 可观察到 ps 的父进程是第二行的 bash,而第一行的 bash 又是第二行的父进程

# 那么继续查看第一行的父进程,则执行 ps aux 
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1648  0.0  0.5 147784  5368 ?        Ss   17:36   0:00 sshd: root@pts/0

# 继续往下看 sshd 的父进程吧,执行命令 pstree -p |grep 1648
|-sshd(1049)---sshd(1648)---bash(1656)---bash(1917)-+-grep(2144)

# 最后 PID 1049 的父进程即为 systemd,PID 为 1
SER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.6 128164  6812 ?        Ss   17:22   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 21

fork-exec: 程序是由多种系统调用产生的,最普遍的两种是 fork() and exec()。fork() 通过复制调用进程的方式以产生新进程,所说的子进程就是对调用进程即父进程的精确地复制,子进程有着独一无二的 PID 同时其 PPID 为父进程的 PID;而 exec() 是对 current process image 的一个替换。

进程优先级
Page Frame 与 Page,

IPC:Inter Process Communication IBMCSDN
同一主机上:
signal
shm:shared memory
semerphor

不同主机上:
rpc:remote procecure call
socket

有关进程

进程类型:

  • 守护进程:daemon,在系统引导过程中启动的进程,跟终端无关的进程
  • 前台(交互)进程:跟终端相关,通过终端启动的进程;当然也可以把在前台启动的进程送往后台,以守护模式运行

进程的状态:

  • 运行态:running
  • 就绪态:ready
  • 睡眠态:可中断,interruptable;不可中断,uninterruptabel
  • 停止态:stopped,暂停与内存中,但不会被调度,除非手动启用
  • 僵死态:zombie

相关命令

pstree 命令

显示树状结构的进程,加上 -p 选项即可带上其 PID

ps 命令

ps - report a snapshot of the current processes.即报告一张当前进程的快照。
ps [options] 其中常用选项组合有:

ps aux

a:所有与终端相关的进程
x:所有与终端无关的进程
u:以用户为中心组织进程状态信息显示
# 是的,这些都没有带减号;结果输出如下

ps aux命令展示
其中表头名词解释入下:

VSZ:虚拟内存集
RSS:Resident Size,常驻内存集
STAT:状态
	R:running
	S:Interruptable sleeping
	D:Uninterruptable sleeping
	T:Stopped
	Z:zombie
	
	+:前台进程
	l:多线程进程
	N:低优先级进程
	<:高优先级进程
	s:session leader
ps -l
# 列出与此次登录有关的进程

pgrep, pkill

pgrep, pkill - look up or signal processes based on name and other attributes.

pgrep [options] pattern

-u username:限定为某用户
-l:显示进程名
-a:显示完整格式的进程名

pidof

根据进程名,取其 PID

top

动态刷新显示 Linux 上的进程信息

-b:以批次方式显示
-n #:显示多少批次
# 可配合重定向使用,~]# top -n 1 > ./topshow.txt

# 以下操作在 top 内部进行
P:以占据 CPU 百分比排序
M:以占据内存百分比排序
T:以累计占用 CPU 时间进行排序

s:修改刷新时间间隔
k:终止指定的进程

uptime

显示系统时间、运行时长及平均负载;过去一分钟、五分钟和 15 分钟的平均负载(等待运行的进程队列的长度);也为 top 命令的首部信息

htop

首先安装 htop 命令前需要安装 EPEL源 (Extra Packages for Enterprise Linux)

yum install  epel-release.noarch

完成后再进行 htop 命令的安装:

yum install htop

进入后 F1 获取帮助

vmstat

Report virtual memory statistics
vmstat命令解释

procs:
	r:等待运行的进程个数;cpu 上等待运行的任务队列长度
	b:处于不可中断睡眠态的进程个数;被阻塞的任务队列的长度
	
memory:
	swpd:交换内存的使用总量
	free:空闲的物理内存总量
	buffer:用于 buffer 的内存总量
	cache:用于 cache 的内存总量
	
swap:
	si:数据进入 swap 中的数据速率 kb/s
	so:数据离开 swap 的速率 kb/s
	
io:
	bi:从块设备读入数据到系统的速率 kb/s
	bo:保存数据至块设备的速率 kb/s
	
system:
	in:interrupt,中断速率
	cs:context switch,上下文切换的速率
	
cpu:
	us:user space
	sy:system
	id:idle
	wa:wait
	st:stolen

pmap

report memory map of a process

pmap `pgrep ssh`

dstat

versatile (通用的,万能的) tool for generating system resource statistics
不过需要在安装 EPEL源后才能执行安装命令

kill

kill 命令用于向进程发送信号,以实现对进程的管理;

kill -l

即可列出当前系统上可用的信号,或是man 7 signal进行详细查询;常用信号(The default signal for kill is TERM.):

  • 1号 SIGHUP:无需关闭进程而让其重读配置文件
  • 2号 SIGINT:终止正在运行的进程,相当于 Ctrl + C
  • 9号 SIGKILL:杀死运行中的进程,即强制中断正在运行的程序
  • 15号 SIGTERM:终止正在运行中的进程,即以正常的方式结束该程序;若程序已出问题则此信号无效
  • 18号 SIGCONT
  • 19号 SIGSTOP:相当于 Ctrl + Z

OPTIONS:

<pid> [...]
       Send signal to every <pid> listed.

-<signal>
-s  <signal>
--signal  <signal>
# 以上三种都是添加信号的方式,而信号也可以通过数字、完整名称或是简写名称来标识

# 示例
[root@CentOBox ~]# kill -9 `pgrep ssh`
Connection to 192.168.31.37 closed by remote host.
Connection to 192.168.31.37 closed.
# 此时再进行远程连接时提示:ssh: connect to host 192.168.31.37 port 22: Connection refused

killall

由于 kill 命令必须通过 PID 使用,所以经常配合 ps, pgrep 命令使用,而 killall 命令 kill processes by name.

-s, --signal, -SIGNAL:Send this signal instead of SIGTERM.(同样默认是 TERM 信号)
-i:杀前询问,Interactively ask for confirmation before killing.

Linux 系统作业控制

job 的分类:

  • 前台作业 foreground:通过终端启动,且启动后会一直占据终端
  • 后台作业 background:可以通过终端启动,但启动后即转入后台运行(释放终端)

对于运行中的作业,Ctrl + z 即送往后台但作业会自动转为停止态;对与尚未启动的作业,执行

COMMAND &

此类作业虽被送往后台,但依然与终端相关;如果希望送往后台的作业脱离与终端的关系则

nohup COMMAND &
# nohup - run a command immune to hangups, with output to a non-tty. nohup 仅仅是免疫挂起信号,并且摆脱终端。

接下来便是jobs查看所有的作业,以及作业调度命令:

fg [[%]JOB_NUMBER]:指定的作业调回前台
+:默认处理的任务
-:默认下一个处理的任务
bg [[%]JOB_NUMBER]:让送往后台的作业在后台继续运行
kill [%JOB_NUMBER]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值