linux进程及作业管理实验,Linux进程及作业管理总结

一、简介

在使用Windows操作系统中很多时候需要查看某些程序进程的运行情况,一般来说我们可以打开Windows提供的"任务管理器",然后点击"进程"栏即可查看到当前系统运行的进程列表。例如偶尔出现系统内存、CPU占用过高的时候,我们往往都会查看进程列表,并找到当前占用内存或CPU过高的进程,再把这些占用过高的进程给清理掉,以便释放内存使用率。

在Linux系统中也同样需要及时查看进程运行(内存占用)情况。以便我们轻松的实现系统调整优化(调整占用过高的进程、查看调整nice值等),下面将具体说明相关命令的用法讲解。

二、用法详解

1.pstree,查看进程树命令,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

2.ps,以静态(快照)方式查看进程状态结果命令。

(1)ps命令的BSD风格命令,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

(2)ps命令的SysV风格命令,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

3.pgrep,过滤显示指定进程命令,语法格式:pgrep [OPTIONS] "PATTERN"

-U UID:仅显示以指定用户身份运行的进程;

-G GID

-l: 显示PID和进程名;

例:显示sshd这个进程的进程号,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

例:显示root用户所有进程的进程号,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

例:显示属组为root的所有进程的进程号,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

例:显示指定进程的pid和进程名,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

4.pidof,查看指定进程的pid号,语法格式:pidof PROGRAM(给定命令行程序)。详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

5.top,以动态方式查看进程状态结果命令,默认按CPU占有百分比排序,有许多交互式子命令,说明及图片如下:

P:以占据的CPU百分比大小排序(每次刷新CPU占用的百分比);

M:以占据Memory空间大小排序;

T:CPU累积占用时间排序;

l: 是否显示系统负载行;队列长度的合理区间:CPU颗数*0.7

t: 是否显示进程摘要信息及CPU负载状态;

Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

us: user space(用户空间的程序所占据的CPU百分比)

sy: system (kernel space:运行内核代码占据的百分比)

ni: nice(优先级,该值的调整影响到的CPU百分比)

id: idle(CPU空闲百分比)

wa: wait io(等待IO完成占据的CPU百分比)

hi: hardware interrupt(处理硬件中断占据的CPU百分比)

si: software interrupt(处理软件中断占据的CPU百分比)

st: stolen, 被虚拟机“偷走”的百分比

1:平均或单独显示CPU的负载状态;

m: 是否显示内存相关的状态信息;

q: 退出命令

s: 修改延迟时长

k: 终止指定进程

3c8ce6380daa33c267ccb0e2e66a02de.png

top命令的选项:

-b: batch,批次显示

-n #: 显示的批次数量

-d #: 指明延迟时长

6.uptime,显示当前系统时间,运行时长,登录用户数及系统平均负载,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

7.htop,比top命令功能更强大的以动态方式查看进程状态结果命令,默认也是按照CPU占有百分比排序,安装详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png htop也有许多交互式子命令,说明及图片如下:

F1-F10:菜单命令;

u: 过滤仅显示选定用户的进程;

s: 跟踪选定的进程所发起的系统调用;

l: 显示选定进程所打开的文件;

t(F5): 显示进程的层次结构(此命令与按F5键的效果相同);

a: 设定进程的cpu亲缘性;(将选定的进程绑定在指定的CPU上)

3c8ce6380daa33c267ccb0e2e66a02de.png

htop命令的选项:

-d #: 延迟时长

-u USERNAME: 仅显示指定用户的进程;

-s COLUMN: 根据指定的字段进行排序;

8.vmstat,查看虚拟内存使用状况,语法格式:vmsate [delay [count]],说明及图片如下:

procs:

r: 等待运行的进程的个数;(队列长度)

b:处理不可中断睡眠状态的进程的个数;(即IO阻塞队列长度)

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: 中断速率

cs: 进程切换的速率

cpu

us:

sy:

id:

wa:

st:

3c8ce6380daa33c267ccb0e2e66a02de.png  vmstat-s,显示内存的状态统计数据,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png 补充:/proc/#接口:每一个进程都有一个与其pid号同名的目录,这里的文件就是内核参数中的映射。

9.pmap: 查看指定进程的内存映射关系;语法格式:pmap [OPTIONS] pid…

-x: 显示扩展信息

详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

补充:采用cat /proc/#/maps 进行查看时,效果与上面相同,示例见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

10.glances: 进程监控查看工具,命令语法格式如下:

glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [–password]    [-t refresh] [-f file] [-o output]

常用选项:

-b: 以Byte/s为单位显示网卡设备数据交换速率;

-d: 关闭磁盘I/O功能模块;

-f /PATH/TO/SOMEFILE:设置输出文件的位置及格式;

-o {HTML|CSV}:

-m: 关闭mount功能模块

-n: 关闭网络功能模块

-r: 关闭进程列表功能模块

-t #: 指定延迟时长,默认为3秒;

-1:单独显示每颗CPU相关负载数据信息;

glances支持远程模式:

即可以以C/S模式工作:

Server: 以监听模式启动glances;

Client: 以远程模式启动glances,远程连入指定服务器,并Server上的相关性能数据;

服务模式:

glances -s -B IPADDR

-B: 用于指明监听的本地地址;

客户端模式:

glances -c IPADDR

-c: 用于连入的服务器的地址;

glances工具默认情况下没有被安装,可通过yum命令单独进行安装,安装详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

例:以Byte/s为单位显示网卡设备数据交换速率,命令为:glances -b,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

例:关闭磁盘I/O功能模块,命令为:glances -d,,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

例:glances实现C/S架构远程访问,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

11.dstat: 整合了vmstat, iostat, netstat and ifstat四款工具的功能,命令语法格式如下:

dstat [-afv] [options..] [delay [count]]

常用选项:

-c: 显示cpu性能指标相关的统计数据;

-d: 显示disk相关的速率数据;

-g: 显示page相关的速率数据;

-i: 显示interrupt相关的速率数据;

-l: 显示load average相关的统计数据;

-m: 显示memory相关的统计数据;

-n: 显示网络收发数据的速率;

-p: 显示进程相关的统计数据,

-r: io请求的速率;

-s: 显示swap的相关数据

-y: 显示系统相关的数据,包括中断和进程切换;

–top-cpu:显示最占用CPU的进程;

–top-bio:显示最消耗block io的进程;

–top-io:最占用io的进程;

–top-mem:显示最占用内存的进程;

–ipc: 显示进程间通信相关的速率数据;

–raw: 显示raw套接的相关的数据;

–tcp: 显示tcp套接字的相关数据;

–udp: 显示udp套接字的相关数据;

–unix: 显示unix sock接口相关的统计数据;

–socket:

-a: -cdngy

dstat工具默认情况下没有被安装,可通过yum命令单独进行安装,安装详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

例:使用dstat查看CPU用量,命令为:dstat -c,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

例:使用dstat显示disk相关的速率数据,命令为:dstat -d,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

例:使用dstat显示page相关的速率数据,命令为:dstat -g,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png例:使用dstat显示load average相关的统计数据,命令为:dstat -l,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

例:使用dstat显示网络收发数据的速率,命令为:dstat -n,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

例:使用dstat显示最占用CPU的进程,命令为:dstat –top-cpu,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

例:使用dstat显示最占用io的进程及最占用内存的进程,命令为:dstat –top-cpu 及 dstat –top-mem,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

补充:IPC: 进程间通信

常见形式:

message queue(消息队列)

semerphore(信号量)

shared memory(共享内存)

signal(信号)

12.signal: 传递给进程的短小信息

Linux主机支持的进程间可用到的信息:

(1) kill -l

(2) man 7 signal

向进程发信号:

kill [-SIGNAL] PID

默认的信号为SIGTERM(15号);

信号表示方式:

(1) 完整名称,例如SIGINT

(2) 简写名称,例如INT

(3) 数据代称,例如2

常用信号:

SIGHUP: 1, 通知进程重读其配置文件以让新的配置生效,但不用重新启动进程;

SIGINT:2, 打断正在运行中的进程,相当于键盘组合键Ctrl+c

SIGKILL:9, 强行中止正在运行中的进程

SIGTERM: 15, 安全中止正在运行中的进程(kill后面不加信号值默认为15号)

SIGSTOP: 19, 暂停进程

SIGCONT: 18, 继续运行指定进程

例:查看当前系统中支持的信号种类及各信号含义,命令为:kill -l,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

例:使用kill命令安全结束tomcat进程,命令为:kill tomcat端口号,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

kill相似的一组进程,语法格式:killall [-SIGNAL] PROGRAM

例:使用killall命令安全结束名称全部为java的进程,命令为:killall java,详情见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

作业管理:

前台作业:通过终端启动,并且在停止之前也会一直占据终端;

后台作业:作业启动之时与终端无关,或者是在前台启动,但启动后转为与终端无关模式运行;

如何让作业运行于后台?

1、对于已经启动并处于运行中的作业:组合键:Ctrl+z

Note: 作业被送往后台后,默认处于stopped状态;

例:用vim打开a.txt文件后让其运行与后台,详情如下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

2、对于尚未启动的作业:COMMAND &

例:直接用vim a.txt &这种方式可以实现让vim a.txt这个进程直接在后台运行,详情如下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

注意: 此两类方式相关作业,仍然与终端相关;这意味着,终端终止,将会导致与此终端相关的所有作业被终止;

剥离进程与终端的关系:# nohup COMMAND &

例:nohup ping 127.0.0.1 & 命令可以实现剥离终端进程直接在后台运行,详情如下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

作业查看:

jobs命令

作业号、作业状态、启动命令行程序

例:使用jobs查看处于后台运行的作业,详情如下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

作业控制命令:

fg [[%]job_num]:把指定的作业调回前台,示例:fg 1 等价于 fg %1 这里百分号可以省略,详见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

bg [[%]job_num]:把调往后台的指定的作业启动起来,让其后台默默运行;但此作业必须支持运行于后台(例如   cp、mv、rm命令等);

kill [%job_num]:终止指定的作业,这里百分号不能省(省略就变成杀死进程号),具体示例详见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

进程优先级调整:

静态优先级:通过指定进程的nice值来调整其优先级;用户空间运行进程一般都有其nice值;

nice值: -20, 19

优先级:  100, 139

默认启动进程时,其nice值为0, 其优先级为120;

(1) 对于尚未启动的进程:# nice -n N COMMAND

(2) 对于已经启动并处于运行中的进程:# renice -n N PID

具体示例详见下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

注意:nice值越小优先级越高,普通用户仅能够调大nice,调低优先级;

补充pkill命令,该命令也可实现杀死运行中的程序,也可用作踢除当前系统登录用户使用(仅管理员可用):

1. 将某个终端的用户踢出

pkill -kill -t pts/2(终端号)

2. 按用户名踢出用户

pkill -kill -U test(系统用户名)

其他相关命令:sar, iostat, ifstat, tsar等留待今后继续研究。

原创文章,作者:镜花水月,如若转载,请注明出处:http://www.178linux.com/8527

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(1)进程的软中断通信 #include #include #include #include int wait_flag; void stop(); main( ) { int pid1, pid2; // 定义两个进程号变量 signal(2,stop); // 或者 signal (14,stop); while((pid1 = fork( )) == -1); // 若创建子进程1不成功,则空循环 if(pid1 > 0) { // 子进程创建成功,pid1为进程号 while((pid2 = fork( )) == -1); // 创建子进程2 if(pid2 > 0) { wait_flag = 1; //sleep(1); // 父进程等待5秒 kill(pid1,SIGUSR1); // 杀死进程1 kill(pid2,SIGUSR2); // 杀死进程2 wait(0); wait(0); printf("\n Parent process is killed !!\n"); exit(0); // 父进程结束 } else { wait_flag = 1; signal(SIGUSR2,stop); // 等待进程2被杀死的中断号17 printf("\n Child process 2 is killed by parent !!\n"); exit(0); } } else { wait_flag = 1; signal(SIGUSR1,stop); // 等待进程1被杀死的中断号16 printf("\n Child process 1 is killed by parent !!\n"); exit(0); } } void stop() { wait_flag = 0; } (2)进程的管道通信 #include #include #include int pid1,pid2; // 定义两个进程变量 main( ) { int fd[2]; char OutPipe[100],InPipe[100]; // 定义两个字符数组 pipe(fd); // 创建管道 while((pid1 = fork( )) == -1); // 如果进程1创建不成功,则空循环 if(pid1 == 0) { lockf(fd[1],1,0); // 锁定管道 sprintf(OutPipe,"\n Child process 1 is sending message!\n"); write(fd[1],OutPipe,50); // 向管道写入数据 sleep(5); // 等待读进程读出数据 lockf(fd[1],0,0); // 解除管道的锁定 exit(0); // 结束进程1 } else { while((pid2 = fork()) == -1); // 若进程2创建不成功,则空循环 if(pid2 == 0) { lockf(fd[1],1,0); sprintf(OutPipe,"\n Child process 2 is sending message!\n"); write(fd[1],OutPipe,50); sleep(5); lockf(fd[1],0,0); exit(0); } else { wait(0); // 等待子进程1 结束 read(fd[0],InPipe,50); // 从管道中读出数据 printf("%s\n",InPipe); // 显示读出的数据 wait(0); // 等待子进程2 结束 read(fd[0],InPipe,50); printf("%s\n",InPipe); exit(0); // 父进程结束 } } }

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值