进程管理和计划任务

进程管理使用的工具以及命令,计划任务的创建和执行,以及工作中需要的注意事项

进程

  • 每个进程都有唯一的编号,在/proc下可以看到,每个文件夹就代表一个进程,
  • { }中的进程表示线程,每个进程有一个或者多个线程
  • 每个线程独立工作,线程共享磁盘空间
  • 父进程被杀,子进程自动消失
  • 图形界面比较占资源,建议关闭图形界面,用时开启切换
  • 如果一个进程占用的内存资源一致在增长,那么说明该程序开发有问题

 

Process :程序运行起来就叫进程,运行程序的一个副本,是被载入内存的一个指令集合

进程ID(process ID ,PID)号码被用来标记各个进程

UID,GID,SELINUX决定对文件系统的存取和访问权限

通常从执行进程的用户来继承

进程存在生存周期

CENTOS6中第一个进程为 init (进程号为1),其余都为init的子进程

CENTOS7中第一个进程为 system (进程号为1),其余的为system的子进程

 

进程创建:父子进程

进程都由其父进程创建

开启一个子进程,只有当子进程发生数据更改时,则在内存中开辟一块空间(COW写时复制)

进程优先级

系统优先级:数字越小,优先级越高(0-99)

实时优先级:数值越大,优先级越高

Nice值:值越高,优先级越小,可以手动调整(-20—-19)

Renice  -n   #  :可以调整nice优先级(程序在运行状态调整nice值)

指定以#优先级运行程序

Nice  -n  5  ping 127.0.0.1

Pri:priority 优先级

Psr:processor CPU编号

Rtprio:实时优先级

例:ps  axo  cmd,pid,ni,pri,rtprio

进程类型

守护进程:daemon,开机自动启动,和终端无关,不需要用户登录即可启动

前台进程:和终端有关,需要用户登录启动

守护进程和前台进程可以相互转化

进程状态

运行状态,就绪状态,睡眠状态,停止状态,僵死状态

R:运行或就绪状态

D:不可中断的睡眠

S:可中断的睡眠

T:停止状态

Z:僵死状态(该状态太多会影响系统性能,重启之后恢复)

<:高优先级进程

N:低优先级进程

t:前台进程组中的进程

l:多线程进程

s:会话(子进程)发起者

+:前台进程

 

 

 

进程命令

Pstree:显示树状进程(进程树)

-p:显示进程pid

-p  user:显示该用户的进程

-ps #:查看和自己有父子关系的进程,包括自己,自己的父进程和子进程(centos7可用)

-H:高亮显示(没有颜色)

Ps:process stats 显示当前进程状态

显示当前终端下的进程

 

三种风格选项

Unix   -options

BSD   options  直接跟选项

GNU   –options 长选项

 

BSD选项

a :显示所有和终端相关的进程

x :和终端无关的进程(?表示)

u :显示进程所有者的信息

 

Ps  auxf :以树状显示进程

o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem

k|–sort 属性 对属性排序,属性前加- 表示倒序(centos7上好用)

L:显示支持的属性列表

 

UNIX风格选项

-C:cmdlist指定命令,多个命令用,隔开(相当于过滤)

-L:显示线程

-e:显示所有进程,相当于-A

-f:显示完整格式的程序信息

-F:显示更完整格式的进程信息

-H:以进程层级格式显示进程的相关信息

-u:userlist 指定有效用户ID或名称

-U:指定真正的用户ID或名称(SUID)

-g:gid或grouplist 指定有效的gid或组名称

-G:指定真正的gid或者组名(SGID)

-p:显示指定pid的进程

–ppid pid  :显示属于pid的子进程

 

例:ps -x  查询你拥有的所有进程(哪个用户登录,就显示哪个用户的进程)有效用户

Ps -fU username|UID :显示指定用户(RUID)的进程(发起者的进程,有效用户也会显示)

Ps -fu username|UID :显示指定用户(EUID)的进程(不显示 有效用户的进程,如psswd不会显示)

Ps -fG groupname:列出该组名所拥有的所有进程

Ps -fg groupname:列出有效组名所拥有的有效进程

Ps -fp pid  通过进程ID来显示所属的进程

Ps -f –ppid uid:以父进程ID 来显示其下所有的进程

Ps -ft 终端:按照终端来显示所属进程

Ps -e –forest:以进程树显示系统中的进程如何互相链接

Ps -f –forest -C 进程名称:以进程树显示指定的进程

查找占用最多内存和CPU的进程:

ps -eo pid,ppid,cmd,%mem,%cpu –sort=-%mem | head

ps -eo pid,ppid,cmd,%mem,%cpu –sort=-%cpu | head

 

Pgrep

pgrep [options] pattern (表达式)

-u uid: effective user,生效者

-U uid: real user,真正发起运行命令者

-t terminal: 与指定终端相关的进程 (只显示进程ID,配合-l使用)

-l: 显示进程名

-a: 显示完整格式的进程名

-P pid: 显示指定进程的子进程

 

Pidof  查看进程名

Pidof  进程名

例:pidof  bash |httpd

Uptime 负载

显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(1、5、10分钟的平均负载,一般不会超过1)

Top 动态查看进程状态

-d #:指定刷新时间间隔,默认为3秒

-b:全部显示,所有进程

-n #:刷新多少次后退出

 

栏位信息简介

us:用户空间

sy:内核空间

ni:调整nice时间

id:空闲

wa:等待IO时间

hi:硬中断

si:软中断(模式切换)

st:虚拟机偷走的时间

 

M:根据驻留内存大小排序

P: 根据cpu使用百分比进行排序(默认就是cpu排序)

T: 根据累计时间进行排序

l:是否显示平均负载和启动时间

t:是否显示进程和cpu状态相关信息

m:是否显示内存相关信息

c :是否显示完整的命令行信息

q:退出top

k:终止某个进程

W:保存文件

z:添加颜色

 

Htop(top升级版自带颜色,需要epel安装)

-d #:指定延迟时间

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

-s colume:以指定字段进行排序

 

子命令

s : 跟踪选定进程的系统调用

l : 显示选定进程打开的文件列表

a :将选定的程序绑定至某指定的CPU核心

t : 显示进程树

 

Lsof  -i  :+端口号  :查看哪个进程使用该端口号

 

Vmstat: 虚拟内存信息

-s:显示内存的统计数据

 

 

procs:

r:可运行(正运行或等待运行)进程的个数,和核心数有关

b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度)

memory:

swpd: 交换内存的使用总量

free:空闲物理内存总量

buffer:用于buffer的内存总量

cache:用于cache的内存总量

swap:

si:从磁盘交换进内存的数据速率(kb/s)

so:从内存交换至磁盘的数据速率(kb/s)

io:

bi:从块设备读入数据到系统的速率(kb/s)

bo: 保存数据至块设备的速率

system:

in: interrupts 中断速率,包括时钟

cs: context switch 进程切换速率

cpu:

us:Time spent running non-kernel code 用户空间

sy: Time spent running kernel code 内核空间

id: Time spent idle. Linux 2.5.41前,包括IO-wait time.   空闲

wa: Time spent waiting for IO. 2.5.41前,包括in idle.  等待io时间

st: Time stolen from a virtual machine. 2.6.11前, unknown.  被偷走的时间

Iostat:统计cpu和设备的IO信息

查看哪块磁盘的压力大

 

 

例 :iostat 1  10  每一秒执行此,执行10次以后推出

Pmap:查看进程和内存的映射关系

Pmap  options  pid

-x:显示详细格式的信息

Glances:epel源  远程监控主机状态

 

常用选项:

-b: 以Byte为单位显示网卡数据速率

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

-f /path/to/somefile: 设定输入文件位置

-o {HTML|CSV}:输出格式

-m: 禁用mount模块

-n: 禁用网络模块

-t #: 延迟时间间隔

-1:每个CPU的相关数据单独显示

 

C/S模式下运行glances命令

v服务器模式:

glances -s -B IPADDR

IPADDR: 指明监听的本机哪个地址

v客户端模式:

glances -c IPADDR

IPADDR:要连入的服务器端地址

dstat命令:系统资源统计,代替vmstat,iostat

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

-c: 显示cpu相关信息

-C #,#,…,total

-d: 显示disk相关信息

-D total,sda,sdb,…

-g:显示page相关统计数据

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

-n: 显示network相关统计数据

-p: 显示process相关统计数据

-r: 显示io请求相关的统计数据

-s: 显示swapped相关的统计数据

–tcp

–udp

–unix

–raw

–socket

–ipc

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

–top-io: 显示最占用io的进程

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

–top-latency: 显示延迟最大的进程

Iotop : 用来监视磁盘I/O使用状况的top类工具

iotop具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息。可查看每个进程是如何使用IO

 

iotop输出

第一行:Read和Write速率总计

第二行:实际的Read和Write速率

第三行:参数如下:

线程ID(按p切换为进程ID)

优先级

用户

磁盘读速率

磁盘写速率

swap交换百分比

IO等待所占的百分比

线程/进程命令

options

-o, –only只显示正在产生I/O的进程或线程。除了传参,可以在运行过程中按o生效。

v-b, –batch非交互模式,一般用来记录日志。

v-n NUM, –iter=NUM设置监测的次数,默认无限。在非交互模式下很有用。

v-d SEC, –delay=SEC设置每次监测的间隔,默认1秒,接受非整形数据例如1.1。

v-p PID, –pid=PID指定监测的进程/线程。

v-u USER, –user=USER指定监测某个用户产生的I/O。

v-P, –processes仅显示进程,默认iotop显示所有线程。

v-a, –accumulated显示累积的I/O,而不是带宽。

v-k, –kilobytes使用kB单位,而不是对人友好的单位。在非交互模式下,脚本编程有用

-t, –time 加上时间戳,非交互非模式

-q, –quiet 禁止头几行,非交互模式,有三种指定方式

Kill命令

不能kill  -9  1 ,虽然杀不死,但是会重伤,可能会影响一些程序的正常运行

 

向进程发送控制信号,以实现对进程管理,每个信号对应一个数字,信号名称以SIG开头(可省略),不区分大小写

显示系统可用信号:  kill -l    或者   grap  -l

 

信号分类

0、测试信号,查看该进程是否在存在

  • SIGHUP:无须关闭进程而让其重读配置文件
  • SIGINT:中止正在运行的进程,相当于ctrl+c
  • SIGQUIT:相当于ctrl+\
  • SIGKILL:强制杀死正在运行的进程
  • SIGTERM:终止正在运行的进程(正常终止)(默认信号)
  • SIGCONT:继续运行

19、SIGSTOP:后台休眠

指定信号的方法:

(1) 信号的数字标识:1, 2, 9

(2) 信号完整名称:SIGHUP (3) 信号的简写名称:HUP

 

用法 ,options

按PID:kill [-SIGNAL] pid …

kill –n SIGNAL pid;

kill –s SIGNAL pid

例:kill  -#   pid

Killall    按名称:killall [-SIGNAL] comm…

Killall  -9  sleep:杀掉所有sleep进程

按模式:pkill [options] pattern

 

-SIGNAL :仅pkill可用

-u uid: effective user,生效者

-U uid: real user,真正发起运行命令者

-t terminal: 与指定终端相关的进程

-l: 显示进程名(pgrep可用)

-a: 显示完整格式的进程名(pgrep可用)

-P pid: 显示指定进程的子进程

 

作业管理

前台作业:通过终端启动,且启动后一直占据终端;

后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)

 

让作业运行于后台(作业放到后台,默认为休眠状态)

运行中的作业:ctrl+z

尚未运行的作业:command  &

查看当前终端放在后台的所有作业:jobs

Fg (jobs—num作业号):把后台作业调回前台(%可省略)

Bg (jobs—num作业号):让送往后台的作业在后台继续运行(%可省略)

Kill  (jobs—num作业号):终止指定的作业(必须有%)

 

后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望送往后台后,剥离与终端的关系

nohup COMMAND &>/dev/null &

screen;COMMAND

(远程执行大的任务建议开启screen或者nohup,以防止断网引起任务终止)

前后台作业切换图示

 

并行任务

方法1

vi all.sh

f1.sh&

f2.sh&

f3.sh&

方法2

(f1.sh&);(f2.sh&);(f3.sh&)

方法3

{ f1.sh& f2.sh& f3.sh& }

任务计划

Centos6查看任务启动:chkconfig   –list  服务名

设置开机启动:chkconfig   服务名   on

Centos7查看任务启动:systemctl  is-enabled  服务名

设置开机启动:systemctl  enable  服务名

 

与服务器同步时间

Ntpdate  服务器IP

 

At:适用于一次性任务(ctrl+d 退出任务)

  • At命令依赖于atd服务,需要启动服务才可以运行
  • 任务执行完成后,任务自动删除
  • 在任务计划中,所有标准输出,默认在屏幕上不输出
  • 在/var/spool/at目录下也可以看到at的任务计划

 

 

-v:显示版本信息

-l:列出等待运行的计划作业,相当于atq

-d:删除指定的作业,相当于atrm

-c:查看具体的作业任务

-f /path/from/somefile :从指定的文件中读取任务

-m:当任务被完成之后,发送邮件给用户,一个空邮件

At黑白名单

/etc/at.deny:at任务黑名单,在该名单中的用户,不允许创建at任务,系统创建

/etc/at.allow:at任务白名单,在该名单中的用户,允许创建at任务,需要手动创建

如果同一个用户,同时存在于黑白名单中,那么白名单的优先级高于黑名单,白名单中的用户生效

如果存在白名单,那么在白名单之外的用户,将全部被拒绝创建at任务

如果黑白名单文件都不存在,所有用户全部被拒绝,只用root可以创建

Cron 周期性执行任务计划

  • 建议将任务计划放置于/etc/cron.d/下,创建文本,有利于管理
  • /etc/cron.{allow,deny}用法和权限限制都和at 一致

 

 

查看crond运行状态

Centos7  :  systemctl  status  crond

Centos6  :  service  crond  status

 

cron日志存放位置: /var/log/cron

 

Cron 任务计划:系统维护作业

/etc/crontab   在该文件中定义cron计划任务

格式:

# Example of job definition:

# .—————- minute (0 – 59)

# |  .————- hour (0 – 23)

# |  |  .———- day of month (1 – 31)

# |  |  |  .——- month (1 – 12) OR jan,feb,mar,apr …

# |  |  |  |  .—- day of week (0 – 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# |  |  |  |  |

# *  *  *  *  * user-name  command to be executed

30  2 *  *  *   yan    backup

每天的2:30  yan用户执行backup任务

注:

  • 每月的几号和每周的星期几,是或者的关系,除此之外都是并且的关系
  • 在/etc/crontab中定义任务,用使用命令是,注意有些特殊符号需要转义

 

用户cron任务:crontab命令

  • 每个用户都有专用的cron任务文件:/var/spool/cron/username
  • 用户创建任务计划,默认打开的是vi不是vim,需要自己定义,加入命令export ENDTOR=vim

 

 

Crontab命令

Crontab  -u user  [ options ]

-l:列出所有任务

-e:编辑任务

-r:移除所有任务

-i:同-r一同使用,以交互式模式移除指定任务(给出提示是否删除)

-u user :仅root可运行,指定用户管理cron任务

 

时间表示法:

  • (1) 特定值

给定时间点有效取值范围内的值

  • (2) *

给定时间点上有效取值范围内的所有值

表示“每…”

  • (3) 离散取值

#,#,#

  • (4) 连续取值

#-#

  • (5) 在指定时间范围上,定义步长

/#: #即为步长

 

控制用户执行计划任务

/etc/cron.{allow,deny}

 

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/90459

(1)
上一篇 2017-12-20 15:41
下一篇 2017-12-21 15:05

相关推荐

  • linux文本处理三剑客—grep

      cat:concatenate 文本文件查看工具 cat [option] filename… -n:给显示出来的文本行加上编号 -b:非空行编号 -V:显示 ^ -E:显示行结束符$ -T:显示制表符 -A:显示所有控制符-A=-VET -s:压缩连续…

    系统运维 2016-08-05
  • Bash编程之流程控制

    Bash作为一种过程式编程语言,拥有一套流程控制体系,可完成选择执行,循环执行功能。下面分别介绍if/else,case,select,for,while/until等语法的使用。

    Linux干货 2016-08-21
  • mysql5.6 GTID的实现以及maridb 10.9多主一从的架构

    一、MySQL 5.6 以后出现的GTID:     GTID概念:          1. GTID是一个由服务器的UUID和事务序号组成的唯一事务序号       &…

    Linux干货 2015-12-18
  • LVM 逻辑卷管理器-增大LV容量

    LVM 逻辑卷管理器-增大LV的容量   步骤: (1)新增一个8e systemID的分区; (2)用pvcreate命令构建PV; (3)用vgextend命令将PV加入vg_1; (4)用lvresize命令将新加入的PV内的PE加入lv_1中; (5)通过resize2fs命令将LV的容量扩充到整个文件系统;   (1)新增一个8…

    Linux干货 2016-09-19
  • #招聘福利#饿了么/运维核心岗位/上海

    饿了么/运维核心岗位/上海 待遇面谈 具体岗位:         应用运维,核心岗位,负责商家订单系统,有之前的学长带着成长 要求:     1、1-2年以上工作经验,     2、熟悉shell和python,    &nbsp…

    Linux干货 2016-03-18