Linux——系统管理

进程管理

首先我们要知道进程管理的目的:

1.判断服务器的健康状况

2.查看进程状态

3.杀死进程

当然杀死进程不是一个正常操作,不像在windows中打开任务管理器随便kill掉,杀死进程一般不是一个正常的退出方式,可能会导致某些问题。


我们按照顺序来说,如何查看进程的健康状态呢?

使用top命令:

top - 13:55:33 up 3 min,  2 users,  load average: 0.18, 0.33, 0.16
Tasks: 351 total,   2 running, 349 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.7 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1001332 total,   732424 free,   123868 used,   145040 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   727740 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND            
   316 root      20   0       0      0      0 S  0.7  0.0   0:04.60 kworker/0:3        
  2678 root      20   0  146276   2256   1420 R  0.3  0.2   0:00.26 top                
     1 root      20   0   44516   7128   2596 S  0.0  0.7   0:05.07 systemd            
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.05 kthreadd           
     3 root      20   0       0      0      0 S  0.0  0.0   0:00.47 ksoftirqd/0        
     4 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0        
     5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H       
     6 root      20   0       0      0      0 S  0.0  0.0   0:00.07 kworker/u256:0     
     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0        
     8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh             
     9 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/0            
    10 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/1            
    11 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/2            
    12 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/3            
    13 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/4            
    14 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/5            
    15 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/6            
    16 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/7 
top命令默认3秒刷新一次,windows的任务管理器是1秒刷新一次。

在这里我们可以看到进程的健康状况。

最主要的就是前面5行。

第一行,显示时间,开机了多久,多少个用户,5,10,15分钟之前对应的平均负载。

第二行,进程总数,正在运行进程数,休眠数,停止数,僵尸进程数。

第三行,us 用户空间占用CPU百分比 sy 内核空间占用CPU百分比 ni 用户进程空间内改变过优先级的进程占用CPU百分比 id 空闲CPU百分比 wa 等待输入输出的CPU时间百分比 hi 硬件中断 si 软件中断。这里我们主要看空闲CPU就可以了,也就是id。

第四行,内存空间。也是主要看的部分。

第五行,交换空间。

top是交互命令,可以使用h查看帮助手册。


查看进程的状态

ps aux或ps -le
[root@localhost ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.3  0.7  44516  7144 ?        Ss   13:52   0:05 /usr/lib/systemd/syste
root          2  0.0  0.0      0     0 ?        S    13:52   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    13:52   0:00 [ksoftirqd/0]
root          6  0.0  0.0      0     0 ?        S    13:52   0:00 [kworker/u256:0]
root          7  0.0  0.0      0     0 ?        S    13:52   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S    13:52   0:00 [rcu_bh]
root          9  0.0  0.0      0     0 ?        S    13:52   0:00 [rcuob/0]
root         10  0.0  0.0      0     0 ?        S    13:52   0:00 [rcuob/1]
root         11  0.0  0.0      0     0 ?        S    13:52   0:00 [rcuob/2]
root         12  0.0  0.0      0     0 ?        S    13:52   0:00 [rcuob/3]
root         13  0.0  0.0      0     0 ?        S    13:52   0:00 [rcuob/4]
root         14  0.0  0.0      0     0 ?        S    13:52   0:00 [rcuob/5]
...

USER: 进程对应的用户

PID: 进程号,值得一说的是。/usr/lib/systemd/syste在centOs7中是第一个进程,它是所有进程的父进程。如果是centOs6,则是/bin/init。

%CPU:  CPU使用率

%MEM: 内存使用率

VSZ: 虚拟内存使用

RSS: 实际内存使用

TTY: 终端号。tty1-6是本地终端号,tty7为本地图形终端号。远程终端号位pts/0-255。如果是?则代表这是系统进程

STAT: 进程状态,S表示休眠,s表示包含了子进程,R代表运行。T代表停止,+表示后台运行等等

START: 进程启动时间。

TIME: 耗费CPU的运算时间

COMMAND: 进程名称

使用ps -ls可以看到进程的优先级。

我们还可以使用pstree查看进程树。

[root@localhost ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
        ├─abrt-watch-log
        ├─abrtd
        ├─anacron
        ├─atd
        ├─auditd───{auditd}
        ├─crond
        ├─dbus-daemon───{dbus-daemon}
        ├─firewalld───{firewalld}
        ├─login───bash
        ├─lsmd
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─polkitd───5*[{polkitd}]
        ├─rngd
        ├─rsyslogd───2*[{rsyslogd}]
        ├─smartd
        ├─sshd───sshd───bash───pstree
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        └─wpa_supplicant
就好像我们上面说的,systemd是所有进程的父进程,可以在这里查看到。


杀死进程

kill  信号  进程号
信号是什么呢?可以使用kill -l查看信号。

常用信号:

只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。    下面是常用的信号:
HUP     1     终端断线
INT     2     中断(同 Ctrl + C)
QUIT    3     退出(同 Ctrl + \)
TERM    15    终止
KILL    9     强制终止
CONT    18    继续(与STOP相反, fg/bg命令)
STOP    19    暂停(同 Ctrl + Z)
也就是kill是发送信号的命令。

我们可以使用killall删除一系列进程:

killall [参数]  [进程名]

我们还可以使用nice命令修改进程的优先级。

其实进程的优先级并不总是需要改变,这里了解一下就好了。


工作管理
工作其实也就是后台管理。因为查看后台的程序命令是jobs,所以一般叫做工作管理。


首先我们需要只要

1.后台任务一般是绑定终端的,在这个终端下进入后台的程序在其他终端是无法进行管理的。

2.放入后台的任务需要持续一段时间的,如果一放入后台就执行完,没什么意义。

3.需要交互的任务放入后台无法运行。因为需要交互的话,任务会进入阻塞状态,需要得到输入之后才会进入运行状态。而后台任务无法获得我们的输入。


那么如何放入后台呢?

1.在命令最后面加入 &。

2.执行过程中,使用ctrl+z放入后台。

两者有什么区别呢?使用&放入后台的程序,是运行状态,而使用ctrl+z的方式放入后台是挂起状态,不会执行。

我们可以使用jobs来查看后台的进程。例如:

[root@localhost ~]# jobs
[1]+  Stopped                 top
这样我们就能查看到后台的进程和他们对应的状态。

最前面的1是后台进程工作号。是后台任务的标识。

如何将后台进程恢复到前台:

fg  工作号
将挂起的进程恢复到执行状态:

bg  工作号

有时候我们希望一个后台进程不被终端绑定,希望他一直运行,怎么办呢?

第一个方法就是将进程变为守护进程。但这个方法我们不常用。

第二个方式就是使用nohup命令:

[root@localhost ~]# nohup top &
[1] 2699
这样就会脱离终端了。上面这个只是使用方法的实例,这样做终端知道top需要交互,会拒绝执行这个命令。因为没有意义

第三个方法是将服务卸载/etc/rc.local中,这样,每次开机都会开启这个后台进程。因为这是父进程开启的终端中打开的后台进程,所以相当于没有绑定终端。


定时任务

windows中也有定时任务,并且是图形界面的。

而Linux中则需要在终端中执行。

Linux中分为一次性定时任务和循环定时任务。

一次性定时任务
使用at命令:

at [参数] [时间]
at> 执行的指令
定时之后输入命令,按ctrl +d就可以退出了。

之后可以通过at查看定时任务列表。

可以在/etc/at.deny中设置不能使用at命令的用户。


循环定时任务

1.使用crontab命令。

crontab  [选项]
选项

-e: 编辑任务

-l: 查询任务

-r: 删除当前用户所有任务


格式:

*  *  *  *  *  command 
第一个*:一小时当中第几分钟

第二个*:一天当中第几个小时

第三个*:一个月中第几天

第四个*:一年中第几个月

第五个*:一周中星期几


除此之外,我们需要知道几个符号

*: 代表任意时间

,: 代表不连续的时间

-: 代表连续时间

*/n: 代表隔n执行

例如:每隔10分钟执行:

*/10 * * * * * command


当然这种方式其实并不经常用。

系统提供了几个文件,方便我们的管理。

/etc/cron.{}提供了hourly,daily,weekly,monthly文件,只要我们将文件放置在对应的文件中,就会相对应的每小时,每天,每周,每个月执行。

这几个文件通过/etc/anacrontab来控制,我们来看下其中的内容:

[root@localhost ~]# vim  /etc/anacrontab 

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly
也就是说,他们会每天执行daily,每7天执行weekly,每${monthly}执行monthly。

所以我们只需要将命令放入对应的文件中,其实就能达到定时任务的目的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值