系统管理篇(3)-进程管理
系统管理篇(3)- 进程管理
一、进程监控
1. 进程查看
进程概念
- 运行中的程序,从程序开始运行到终止的整个生命周期是可管理的
- 终⽌的⽅式并不唯⼀,分为正常终⽌和异常终⽌
- 正常终⽌也分为从 main 返回、调⽤ exit 等⽅式
- 异常终⽌分为调⽤ abort、接收信号等
进程查看命令
ps
ps # 当前终端中的进程,PID为进程的唯一标识 ps -e | more # 所有进程,centos7的1号进程是systemd,而centos6为init ps -ef | more # UID为进程的有效用户id(不一定是创建者),PPID为父进程的PID ps -eLf | more # LWP线程
当计算机资源不足时,可以查看是否是进程过多或线程过多导致的。
pstree
# 默认没有安装,需要先安装 yum install -y psmisc pstree | more
top
top # up 33min - 上次开机后已经运行时间 # load average: 0.04 0.05 0.06 - 1,5,15分钟平均负载,可以把负载1想象成一个塞满的车道 # Tasks - 运行的进程 # %Cpu(s) - us用户态,sy系统态(进程间状态交互),id空闲态,wa等待磁盘操作。按数字1可以分别看逻辑cpu # KiB Mem - 内存使用情况 # KiB Swap - swap使用情况 top -p PID
总结:进程也是树形结构;进程和权限有着密不可分的关系
2. 内存查看
常用命令介绍
free
free -m free -mh
top
top top -p PID
二、进程控制
1. 进程优先级
nice
- 范围从-20到19,值越小优先级越高,抢占资源就越多
# 运行提供的脚本 nice -n 10 ./loop.sh
renice
- 重新设置优先级
renice -n 15 PID
2. 进程的作业控制
&符号
# 后台运行提供的脚本 ./loop.sh &
jobs
jobs # 切换后台进程到前台 fg [JOB_ID] # JOB_ID为jobs命令查看到的作业id # 切换前台进程到后台,在内存中挂起 ctrl + z # 恢复前台执行 jobs fg [JOB_ID] # 恢复后台执行 jobs bg [JOB_ID]
3. 进程间通信
- 信号是进程间通信⽅式之⼀,典型⽤法是:终端⽤户输⼊中断命令,通过信号机制 停⽌⼀个程序的运⾏。
- 使⽤信号的常⽤快捷键和命令
- kill -l
- SIGINT 通知前台进程组终⽌进程 ctrl + c
- SIGKILL ⽴即结束程序,不能被阻塞和处理 kill -9 pid
三、系统日志
1. 守护进程
使⽤ nohup 与 & 符号配合运⾏⼀个命令
nohup 命令使进程忽略 hangup(挂起)信号,即关掉终端也不会结束进程
nohup tail -f /var/log/messages &
守护进程(daemon)和⼀般进程
- 随Linux开机自动启动
- 无需终端启动
- 只占用根目录
- 日志输出到系统日志中
cd /proc/PID ls -l CWD ls -l FD
2. 系统日志
- 常见的系统日志
- /var/log
- message
- cron
- secure
四、服务管理程序
1. 服务基本概念
服务(提供常⻅功能的守护进程)集中管理⼯具
2. service
- 启动脚本位置
/etc/init.d/
3. systemctl
systemctl 常⻅操作
systemctl start | stop | restart | reload | enable | disable 服务名称
软件包安装的服务单元 /usr/lib/systemd/system/
systemctl 的服务配置
位置
/usr/lib/systemd/system/
案例:loop脚本开机自动启动
cd /usr/lib/systemd/system/ vi loopd.service # 通常可以复制sshd.service修改 [Unit] Description=Loop service After=network.target [Service] Type=simple # Daemon进程使用forking User=root WorkingDirectory=/root ExecStart=/bin/bash /root/loop.sh ExecStop=/usr/bin/kill -s QUIT $MAINPID ExecReload=/usr/bin/kill -s HUP $MAINPID [Install] WantedBy=multi-user.target systemctl start loopd systemctl stop loopd systemctl enable loopd