如何管理Linux系统的进程与计划任务

1.什么是进程?

什么是进程?
    进程是一系列执行运行在内存中
        。使用数字进程ID(PID)来区分
        。UID,GID和SELinux上下文决定了文件系统的访问
            。通常从执行的用户中继承
列举进程:
    通过ps查看进程信息
    。-a    包括所有的终止进程
    。-x    包括没有关联到终端的进程
    。-u    打印进程所有者信息
    。-f    打印父子进程信息
    。-o    PROPERTY,...打印自定义的信息:
        .pid,comm,%cpu,%mem,state,tty,euser,ruser
    ps默认情况下显示当前用户的信息 
    管道也是一个进程

2.ps命令自定义显示信息 

#ps aux | head -n1    //查询进程标题头
实现只想查看内存,comm,user,pid等信息的命令,然后按照降序排序,取内存消耗最大的前5个进程
#ps axo "%mem,comm,user,pid" | sort -nr |head -n5
#pstree  //查看父子进程(如果父进程消亡,子进程也会消亡)

#ps -axf   //查看父子进程

3.通过发送信令管理进程  

 

信令:
很多基础内部之间进程通信
    。直接发送给进程,不需要用户界面
    。程序关联着动作到每一个信令
    。当发送时指定信令将通过名称或数字:
信令15,TERM(default)-干净的中断  //完整退出,一步步退出,相当于交警拦司机
信令9,KILL-立即中断    //立马退出,相当于警察干劫匪
信令1,HUP-重读取配置文件
man 7 signal显示完整的列表
向进程发送信令
。通过PID:kill 【signal】 pid ...
。通过名字:killall [signal] comm ...
。通过表达式:pkill [-signal] pattern
举例:
  #kill -15 pid  //通过打开两个终端,其中一个终端打开vim 1.txt文件。从另一个终端执行kill -15 pid 查看vim里面结果
等同于#kill -TERM pid
凡是使用vim大家的文件都会在/tmp/目录下生成一个".filename.swp”的文件
使用#pidof vim  //查看vim对应进程的进程号
  #kill -KILL $(pidof vim)来立即中断vim进程  这种中断方式/tmp/.filename.swp文件不会删除
如有人恶作剧打开xeyes20个

[root@eurm ~]# for NUM in {1..20}
> do
>      xeyes &
> done

可以通过#killall -15 xeyes

查找进程

。很复杂:ps options | 其他命令

  #ps axo comm,tty | grep ttyS0

。通过预定义的匹配模式:pgrep

  #pgrep -U root

  #pgrep -G student

。通过程序名字:pidof

  #pidof bash

#pgrep -U student vim  //查看student用户执行的vim进程

#pgrep -U student,visitor vim  //查看student和vistitor用户执行的vim进程号

#killall -9 -u student vim

#pkill -9 -U visitor,student  //停止所有的visitor和student用户执行的进程

4.进程优先级

。优先级决定了CPU的访问
。进程的nice值影响优先级
。值的范围从-20到19缺省为0
    。越低的nice值意味着越高的CPU优先级
。使用ps -o comm,nice查看
#ps axo “pid,tty,user,comm,nice" | grep vim  //查看vim进程的nice值
修改优先级
。可以修改nice值...
  .当启动一个进程时:
    #nice -n 5 command
  .在启动之后:
    #renice 5 PID
。只有root可以降低nice值

[root@eurm ~]# ps axo "pid,user,comm,nice,tty" | grep vim    //查看vim进程的nice值
7755 root vim 0 pts/0

[root@eurm ~]# renice 10 7755    //修改vim的nice值为10
7755: old priority 0, new priority 10

[root@eurm ~]# nice -n -10 vim /etc/passwd  //打开/etc/passwd并且让该进程的优先级为-10

5.top命令

交互式进程管理工具
。控制台:top
。图形界面:gnome-system-monitor
。功能
    。显示实时的进程信息
    。可以排序,杀死或者重新优化

 

 

 

关于top的解释:

当前时间;上线了多久1天2小时3分钟;3个可以登陆用户;负载平均值:每5min;15min;30min

目前有140进程执行;1个运行的进程;139休眠状态进程,对应下面进程栏的【s】状态;0 stopped表示没有停止进程;0 zombie表示没有僵尸进程(内核无法控制,造成内存泄露问题的)

CPU状态:0.0%us用户使用的;sy系统用到的;100.0%id表示空闲的cpu

内存部分:总内存;已经使用内存,剩余内存

交换空间:等同于微软下面页面文件,拿硬盘空间开启交换空间,将内存中休眠进程放进去执行。一般交换空间是内存的1.5-2倍大小。但是内存超过8G的话,1倍就行。

默认情况下top是按照cpu的百分比来排序的
可以进入控制台输入命令进行交互排序:
#top进入中间控制台界面,输入h获取帮助
z开关颜色变化
b开关粗体显示                

#top     之后输入F修改top进入如下界面,输入a查看状况跳转到PID出现在第一个字段

Current Sort Field:  K  for window 1:Def
Select sort field via field letter, type any other key to return 

  a: PID        = Process Id                                 will be unavailable until a field
  b: PPID       = Parent Process Pid                         within viewable range is chosen.
  c: RUSER      = Real user name
  d: UID        = User Id                                  Note2:
  e: USER       = User Name                                  Field sorting uses internal values,
  f: GROUP      = Group Name                                 not those in column display.  Thus,
  g: TTY        = Controlling Tty                            the TTY & WCHAN fields will violate
  h: PR         = Priority                                   strict ASCII collating sequence.
  i: NI         = Nice value                                 (shame on you if WCHAN is chosen)
  j: P          = Last used cpu (SMP)
* K: %CPU       = CPU usage
  l: TIME       = CPU Time
  m: TIME+      = CPU Time, hundredths
  n: %MEM       = Memory usage (RES)
  o: VIRT       = Virtual Image (kb)
  p: SWAP       = Swapped size (kb)
  q: RES        = Resident size (kb)
  r: CODE       = Code size (kb)
  s: DATA       = Data+Stack size (kb)
  t: SHR        = Shared Mem size (kb)
  u: nFLT       = Page Fault count
  v: nDRT       = Dirty Pages count
  w: S          = Process Status
  x: COMMAND    = Command name/line
  y: WCHAN      = Sleeping in Function
  z: Flags      = Task Flags <sched.h>  

需要显示的参数o,f,进入后根据需要显示内容输入对应字母即可。

停止进程:k参数,在弹出的控制台输入进程号,默认是发送15号信令终止进程

r参数调整进程优先级,输入进程id,enter之后输入对应的nice值

s默认3s刷新,输入对应值可以修改刷新时间

w保存这次的配置信息,下次打开会按照本次保存的配置显示。

6.任务控制

。在后台运行进程
    。在命令行后追加&:firefox &
。临时暂停运行的程序
    。使用Ctrl-z或发送信令19(停止)
。后台管理或挂起任务
    。列举任务号和名字:#jobs
    。恢复后台:bg 【%jobnum】
    。恢复前台:fg【%jobnum】
    。发送信令:kill 【-signal】 【%jobnum】终止任务终止jobs里面的数字,需要加上%jobnum(1,2,3...)
系统的1号进程放在/sbin/init下面,如果#kill -9 1的话会导致系统重启

7.计划任务

at一次性任务,crontab用于重复的任务
发送给用户右键而不是直接输出
root可以修改其他用户任务
Create at time   crontab -e
List at -l crontab -l
Details at -c jobnum N/A
Remove at -d jobnum crontab -r
Edit N/A crontab -e
一次性计划任务at用法:
交互式方式:
[root@eurm
~]# /etc/init.d/atd //at存在于/etc/init.d目录下 用法:/etc/init.d/atd {start|stop|status|restart|condrestart|try-restart|reload|force-reload} [root@eurm ~]# /etc/init.d/atd status //查看at状态 atd (pid 1721) 正在运行... [root@eurm ~]# at now+2min //添加一个一次性任务2分钟之后执行 at> ifconfig eth0:testing 1.1.1.1/24 //任务 at> <EOT> //输入Ctrl+D停止输入 job 1 at 2020-06-01 22:46 [root@eurm ~]# at --help //查看at用法 at: invalid option -- '-' Usage: at [-V] [-q x] [-f file] [-mldbv] time at -c job ... atq [-V] [-q x] atrm [-V] job ... batch [root@eurm ~]# atq //查看当前at任务队列 1 2020-06-01 22:46 a root
重定向方式实现一次性定时任务:
[root@eurm ~]# echo "ifconfig eth0:testing 2.2.2.2/24" | at now+2min   //配置管道方式输入一次性任务
job 2 at 2020-06-01 22:52
[root@eurm ~]# ping 2.2.2.2  //2min后验证结果
PING 2.2.2.2 (2.2.2.2) 56(84) bytes of data.
64 bytes from 2.2.2.2: icmp_seq=1 ttl=64 time=0.016 ms
64 bytes from 2.2.2.2: icmp_seq=2 ttl=64 time=0.064 ms
^C
--- 2.2.2.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1197ms
rtt min/avg/max/mdev = 0.016/0.040/0.064/0.024 ms
[root@eurm ~]# /etc/init.d/atd stop  //停止atd任务
停止 atd:                                                 [确定]
[root@eurm ~]# echo "ifconfig eth0:testing 2.2.2.2/24" | at now+2min    //查看停止atd后执行命令的报错。
job 3 at 2020-06-01 22:54
Can't open /var/run/atd.pid to signal atd. No atd running?
[root@eurm ~]# /etc/init.d/atd start   //启动atd
正在启动 atd:                                             [确定]
一次性计划用于和网络相关的比较多。
使用场景:
    <test cmd>   &&  echo "<reverse cmd>" | at now+2min
    这种指令用于网络这块比较多,如我们修改一个ip地址,当时修改后我们会掉线,找维护人员比较麻烦,我们就可以写一个还原网络的命令,在测试时间之后执行。
[root@eurm ~]# ifconfig eth0 172.24.1.128/16 && \
> echo "/etc/init.d/network restart" | at now+2min
Crontab文件格式
    。条目中包含五个有空格间隔的字段和一条命令
        每一行一个条目,没有长度的限制
    。这五个字段分别为分钟,小时,一个月中的某天,月和一个星期中的某天
    。以#开头代表为注释
    。#whatis crontab 。更所信息查看man 5 crontab查看example cron file
#crontab -e创建定时任务
#crontab -l查看计划任务

  

  

  

 

  

  

  

 

posted @ 2020-06-06 21:15  爱吃山楂果  阅读(261)  评论(0)    收藏  举报