linux服务和进程管理
进程管理
进程管理的三个主要任务
- 判断服务器的健康状态
- 查看所有正在运行的进程
- 强制终止进程
进程查看
ps aux
查看当前系统所有运行的进程(可以不加-)
- -a 显示前台所有进程
- -u 显示用户名
- -x 显示后台进程
命令执行结果示例:
ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 41280 3732 ? Ss 9月26 0:02 /usr/lib/systemd/systemd --switched-root --system
root 2 0.0 0.0 0 0 ? S 9月26 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 9月26 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 9月26 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 9月26 0:00 [kworker/u2:0]
root 7 0.0 0.0 0 0 ? S 9月26 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 9月26 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 9月26 0:00 [rcuob/0]
root 10 0.0 0.0 0 0 ? S 9月26 0:36 [rcu_sched]
root 11 0.0 0.0 0 0 ? S 9月26 0:32 [rcuos/0]
···
参数说明:
参数 | 说明 |
---|---|
USER | 用户名 |
PID | 进程PID 1 init 系统启动的第一个进程 |
%CPU | cpu占用百分比 |
%MEM | 内存占用百分比 |
VSZ | 虚拟内存占用量(KB) |
RSS | 固定内存占有量 |
TTY | 登录终端 tty1-7 本地终端1-6 字符、 7图形) pts/0-255 |
STAT | 状态 (S:睡眠 D:不可唤醒 R:运行 T:停止 Z:僵死 W:进入内存交换 X:死掉的进程 <:高优先级 N:低优先级 L:被锁进内存 s:含子进程 +:位于后台 l:多线程) |
START | 进程触发时间 |
TIME | 占用cpu时间 |
COMMAND | 进程本身 |
pstree
- -a 查看进程树
命令执行结果示例:
pstree -a
systemd --switched-root --system --deserialize 21
├─AliHids
│ └─4*[{AliHids}]
├─AliYunDun
│ └─8*[{AliYunDun}]
├─AliYunDunUpdate
│ └─3*[{AliYunDunUpdate}]
├─agetty --noclear tty1 linux
├─aliyun-service -d
├─crond -n
├─dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
├─memcached -d -m 128 -u root -p 11211
│ └─6*[{memcached}]
├─nginx
│ └─nginx
├─ntpd -u ntp:ntp -g
├─php-fpm
│ ├─php-fpm
│ └─php-fpm
├─rsyslogd -n
│ └─2*[{rsyslogd}]
├─sshd -D
│ └─sshd
│ └─bash
│ └─pstree -a
├─systemd-journal
├─systemd-logind
└─systemd-udevd
top
实时显示进程状态
命令执行结果示例:
top - 15:04:52 up 2 days, 5:25, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 70 total, 2 running, 68 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1016796 total, 599400 free, 41948 used, 375448 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 838500 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
917 root 20 0 82696 9152 5456 S 0.3 0.9 5:50.76 AliHids
1 root 20 0 41280 3732 2388 S 0.0 0.4 0:02.36 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/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.26 kworker/u2:0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
···
参数说明
- 第一行:系统当前时间,系统持续时间, 登录用户,1,5,15分钟之前的平均负载
- 第二行:进程总数
- 第三行:CPU占用率
- 第四行:内存使用:总共,空闲,已使用,缓存
- 第五行:swap使用情况
操作命令:
- M,按内存占用排序
- P,安CPU占用排序
- q,退出
终止进程
kill 结束单个进程
kill命令是通过向进程发送指定的信号来结束相应进程的。在默认情况下,采用编号为15的TERM信号。TERM信号将终止所有不能捕获该信号的进程。对于那些可以捕获该信号的进程就要用编号为9的kill信号,强行“杀掉”该进程。
命令格式:kill 信号 PID
信号,进程间的通信方式
我们常用的信号有
信号名称 | 信号 | 意义 |
---|---|---|
HUP | 1 | 终端断线 |
INT | 2 | 中断(同 Ctrl + C) |
QUIT | 3 | 退出(同 Ctrl + \) |
TERM | 15 | 终止 |
KILL | 9 | 强制终止 |
CONT | 18 | 继续(与STOP相反, fg/bg命令) |
STOP | 19 | 暂停(同 Ctrl + Z) |
示例:结束 memcached 进程
获取memcached进程pid(24428,即为memcached进程PID)
ps -aux | grep memcache
root 24428 0.0 0.0 323120 864 ? Ssl 11:00 0:02 /usr/local/memcached/bin/memcached -d -m 128 -u root -p 11211
root 24727 0.0 0.0 112664 984 pts/0 S+ 15:54 0:00 grep --color=auto memcache
#
ps -ef | grep memcache
root 24428 1 0 11:00 ? 00:00:02 /usr/local/memcached/bin/memcached -d -m 128 -u root -p 11211
root 24708 24568 0 15:49 pts/0 00:00:00 grep --color=auto memcache
或者使用pidof查看 ( pid + of )
[root@...]# pidof memcached
24428
终止 memcached
kill -9 24428
ps -aux | grep memcache
root 24729 0.0 0.0 112664 984 pts/0 S+ 15:55 0:00 grep --color=auto memcache
killall
杀死指定名字的进程
命令格式:killall 信号 进程名
示例:
killall -9 memcached
pkill
支持按照一定规则匹配来杀死进程
命令格式:pkill [options]
示例:杀死用户 wahaha 下的所有进程
pkill -u wahaha
把某个终端登陆的用户踢出
pkill -9 -t 终端号
把本地登陆终端1登陆用户踢出
pkill -9 -t tty1
服务管理
Linux中服务的分类
系统默认安装的服务(RPM)
- 独立的服务
- 基于xinetd的服务,xinetd是系统超级守护进程
xinetd服务其本身就是一个独立的服务。
当程序调用xinetd服务时,它先调用的事xinetd服务,让后xinetd服务在调用索要调用的服务进行相应。
Linux系统默认是没有安装xinetd服务的,需要进行安装后才能使用。
源码包安装的服务
系统默认安装的服务
如何区分服务的分类
查看服务的自启动状态
chkconfig --list
运行结果:
chkconfig --list
注意:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。
如果您想列出 systemd 服务,请执行 'systemctl list-unit-files'。
欲查看对特定 target 启用的服务请执行
'systemctl list-dependencies [target]'。
aegis 0:关 1:关 2:开 3:开 4:开 5:开 6:关
agentwatch 0:关 1:关 2:开 3:开 4:开 5:开 6:关
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
Linux的运行级别:0-6
级别 | 说明 |
---|---|
0 | 关机 |
1 | 单用户模式 |
2 | 不完全多用户,不包含NFS服务 |
3 | 完全多用户,字符界面 |
4 | 未分配 |
5 | 图形界面 |
6 | 重启 |
查看当前系统的运行级别:
runlevel
N 3
切换系统当前的运行级别:
命令 | 含义 |
---|---|
init 0 | 关机 |
init 5 | 切换到图形界面(前提图形界面已经安装) |
init 3 | 切换到字符界面 |
init 6 | 重启 |
独立的服务管理
- 启动
第一种方式:
/etc/rc.d/init.d/服务名 start| stop | restart | status
# 例:
/etc/rc.d/init.d/httpd start
第二种方式:(只支持RedHat系列的Linux)
service 服务名 tart| stop | restart | status
service命令其本质是当命令运行时直接在/etc/rc.d/init.d目录下查找相应的服务,并进行相应的操作。)
- 自启动
- 第一种方式:
第二种方式:(推荐)chkconfig --level 2345 服务名 on|off
修改文件内容:vi /etc/rc.local (系统启动时会运行该文件)
touch /var/lock/subsys/local (更新系统的开机时间) # 在下一行,写入自己要启动的服务名,比如我要开机自启动httpd服务: # 就加入/etc/rc.d/init.d/httpd start # 更改后文件就是: touch /var/lock/subsys/local /etc/rc.d/init.d/httpd start
ntsysv自启动管理工具
所有系统默认安装服务都可以使用ntsysv命令进行自启动管理。rpm包安装服务,自启动管理工具(只要rpm安装的,都可进行管理)
源码包安装的服务
启动
/usr/local/apache2/bin/apachectl start
自启动
vi /etc/rc.local
加入
/usr/local/apache2/bin/apachectl start
计划任务
首先保证crond服务时启动的(crond默认是自启动的)
命令:crontab
编辑格式: * * * * * 命令
说明:
- 第一个*:一小时中第几分钟 0-59
- 第二个*:一天中第几个小时 0-23
- 第三个*:一个月中第几天 1-31
- 第四个*:一年第几个月 1-12
- 第五个*:一周中星期几 0-6
例
10 * 31 * * 命令
10 * * * * 命令
5 4 * 5-10 * 命令
*/10 * * * * 命令
5 4 1,15 * * 命令 #日期和星期不要同时指定,会超出预期
5 4 10 * 5 命令
*/20 4 * 5 2 命令 #每隔二十分钟
查看系统定时任务
crontab -l
删除定时任务(慎用,删除之前记得备份数据)
crontab -r
注意事项:
- 选项都不能为空,必须填入,不知道的值使用通配符*表示任何时间
- 每个时间字段都可以指定多个值,不连续的值用,间隔,连续的值用-间隔
- 间隔固定时间执行书写为*/n格式
- 命令应该给出绝对路径
- 星期几何第几天不能同时出现
- 最小时间范围是分钟,最大时间范围是月
查看系统启动信息
查看系统启动信息
dmesg
系统启动信息日志
cat /var/log/dmesg
查看eth0信息
dmesg | grep eth0
查看cpu信息
dmesg | grep CPU