RHEL6基础之十七init进程、服务及其管理

简介:

1、进程的概念
进程是系统中正在运行的程序,它是操作系统资源分配和调度的基本单位。
在Linux系统中,并非每个程序只能对应一个进程,有的程序启动后可以创建一个或多个进程,例如提供Web服务的httpd程序,当有大量用户同时访问web页面时,httpd程序可能会创建多个进程来提供服务。

在进程的运行过程中,通常会在3种基本状态之间转换:运行态、就绪态、等待态(阻塞态)。

运行态:是指当前进程已分配到CPU,它的程序正在处理器上执行时的状态。处于运行态的进程个数不能大于CPU的数目,在一般单CPU机制中,任何时刻处于运行态的进程最多有一个。
就绪态:是指进程已具备运行条件,但因为其他进程正占用CPU,所以暂时不能运行而等待分配CPU的状态。一旦把CPU分给它,立即就可以运行。在操作系统中,处于就绪态的进程数目可以是多个。
等待态(阻塞态):是指进程因等待某种事件发生(如等待某一输入、输出操作完成,等待其它进程发来的信号等)而暂时不能运行的状态。此时即使CPU空闲,等待态的进程也不能运行。系统中处于这种状态的进程也可以是多个。
Linux系统中的进程使用数字进行标记,每个进程的身份标记号称为PID。如在Linux系统的启动过程中,“/sbin/init”是内核加载运行的第一个程序,相应的init进程对应的pid号永远为1。

2、服务的概念

在Linux中有一些特殊的程序,启动后就会持续在后台执行,等待用户或其它软件调用,这种程序称为服务。
Linux系统中提供了很多服务,这些服务依照其功能可以区分为系统服务与网络服务。
系统服务:某些服务的服务对象是Linux系统本身,或者是Linux系统中的用户。
网络服务:Linux系统中更多的服务是用来提供给网络中的其他客户端调用。例如提供远程登录的sshd服务,提供网站浏览功能的httpd服务等。

3、init进程与系统运行级别

init服务是Linux系统中第一个被执行的程序,它主要负责建立系统使用环境,并确保系统正常运行。

init服务运行以后将陆续执行系统中的其它程序,不断生成新的进程,这些进程称为init进程的子进程,反过来说init进程是这些进程的父进程。这些子进程也可以进一步生成各自的子进程,依此不断繁衍下去,最终构成一棵枝繁叶茂的进程树,共同为用户提供服务。所以,init进程是维持整个Linux系统运行的所有进程的始祖,init进程是不允许被轻易终止的。

init服务的配置文件是/etc/inittab
/etc/inittab文件的主要内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Default runlevel. The runlevels used are:
关机状态,使用该级别时将会关闭主机
#   0 - halt (Do NOT set initdefault to this)
单用户模式,不需要密码验证即可登录系统,多用于系统维护
#   1 - Single user mode
字符界面的多用户模式(不支持网络)
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
字符界面的完整多用户模式,大多数服务器主机运行在此级别
#   3 - Full multiuser mode
未分配使用
#   4 - unused
图形界面的多用户模式,提供了图形桌面操作环境
#   5 - X11
重新启动,使用该级别时将会重启主机
#   6 - reboot (Do NOT set initdefault to this)
#
id :5:initdefault:
[root@justin ~] #

若未能确知当前所处的运行级别,可以使用runlevel命令进行查询,输出结果中分别包含切换前的级别和目前的级别。查看系统的当前运行级别,若之前未切换过运行级别,第一列将显示“N”

1
2
3
4
5
6
[root@justin ~] # runlevel
N 5
[root@justin ~] # init 3
[root@justin ~] # runlevel
5 3
[root@justin ~] #

init命令只能临时切换运行级别,要实现永久切换必须修改配置文件/etc/inittab起实质作用的最后这一行:id:5:initdefault:,这一行决定了系统的默认运行级别。默认运行级别一般建议设置为5或3,千万不要设置为0或6,否则将导致系统无法启动。由于Linux主要是作为服务器操作系统,Linux服务器平时一般都是放置在数据中心机房中,由管理员对其进行远程管理。对Linux系统的管理操作一般都是在字符界面下通过命令完成的,很少用到图形界面,而且图形界面也要消耗更多的系统资源,同时也会导致系统不稳定,所以大多数情况下系统的运行级别都是被设置为3。

4、进程状态查看

ps命令——查看静态的进程统计信息

151553167.png

-C<命令> 列出指定命令的状况    --no-header 忽略头部

1
2
3
4
5
6
7
8
[root@localhost logs] # ps -C haproxy
   PID TTY          TIME CMD
  1943 ?        00:00:00 haproxy
  1944 ?        00:00:00 haproxy
[root@localhost logs] # ps -C haproxy --no-header
  1943 ?        00:00:00 haproxy
  1944 ?        00:00:00 haproxy
[root@localhost logs] #
1
2
3
4
5
[root@justin ~] # ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  2137  2135  0  80   0 -  1714 -      pts /0     00:00:00  bash
4 R     0  2336  2137  0  80   0 -  1619 -      pts /0     00:00:00  ps
[root@justin ~] #

154031377.png

1
2
3
4
5
6
[root@justin ~] # ps -aux|more
Warning: bad syntax, perhaps a bogus  '-' ? See  /usr/share/doc/procps-3 .2.8 /FAQ
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1   2880  1492 ?        Ss   Oct21   0:02  /sbin/init
root         2  0.0  0.0      0     0 ?        S    Oct21   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    Oct21   0:00 [migration /0 ]

155314104.png


查看某个进程文件的启动位置

通过ps查看进程的PID,进入/proc/pid通过ls -al查看,cwd就是你要查找进程的位置

blob.png


top命令——查看进程动态信息

top命令将会在当前终端以全屏交互式的界面显示进程排名,及时跟踪包括CPU、内存等系统资源占用情况,默认情况下每3秒钟刷新一次,其作用类似于Windows系统中的“任务管理器”。由于过于消耗资源,所以在生产环境中top命令用的比较少

1
2
3
4
5
6
7
8
9
10
[root@justin ~] # top
top  - 00:49:40 up  2:50,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  92 total,   1 running,  88 sleeping,   3 stopped,   0 zombie
Cpu(s):  0.0%us,  0.2%sy,  0.0%ni, 99.6% id ,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:   1030796k total,   172808k used,   857988k  free ,    22008k buffers
Swap:  2097144k total,        0k used,  2097144k  free ,   108184k cached
   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND              
  2493 root      20   0  2652 1076  868 R  0.2  0.1   0:00.24  top                   
     1 root      20   0  2880 1492 1268 S  0.0  0.1   0:02.29 init                  
     2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd

091854454.png

第三行:cpu状态

6.7% us — 用户空间占用CPU的百分比。

0.4% sy — 内核空间占用CPU的百分比。

0.0% ni — 改变过优先级的进程占用CPU的百分比

92.9% id — 空闲CPU百分比

0.0% wa — IO等待占用CPU的百分比

0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比

0.0% si — 软中断(Software Interrupts)占用CPU的百分比


PID----进程id

USER--进程所有者的用户名

PR-----进程的优先级

NI------nice值,负值表示更高的优先级,正值表示低优先级

VIRT---进程使用的虚拟内存总量,单位为kb。其中VIRT=SWAP RES

RES----进程使用的、未被换出的物理内存的大小,单位为kb。

SHR---共享内存的大小,单位为kb

S-------进程状态

    D---不可中断的睡眠状态

    R---运行

    S---睡眠

    T---跟踪/停止

    Z---僵尸进程

%CPU--上次更新到现在的CPU时间占用比

%MEM--进程使用的物理内存百分比

TIME ---进程使用的CPU时间总计,单位为1/100秒

COMMAND---命令行/命令名,

      按c键可以查看command的详细命令

      i忽略闲置和僵尸进程。这是一个开关式的命令;

更改显示列的方法:

    a)通过f键可以选择显示的内容,按f键后会显示列的列表,按a-z即可显示或隐藏对应的列,最后按回车键确定;

    b)按o键可以改变列的显示顺序。按小写的a-z可以将相应的列向右移动,而大写的A-Z可以将相应的列向左移动。最后按回车键确定;

    c)按大写F或O键,然后按a-z可以将进程按照相应的列进行排序。而大写的R键可以将当前的排序倒转;


在top界面直接输入top指令就可以做显示做相应筛选

093841615.png

查看指定进程

1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~] # pidof mongod
30172
[root@localhost ~] # top -p `pidof mongod`
top  - 09:34:53 up 26 days, 22:07,  1 user,  load average: 0.03, 0.05, 0.05
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.6 us,  0.1 sy,  0.0 ni, 99.4  id ,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 65809140 total,  4673868  free , 23277540 used, 37857732 buff /cache
KiB Swap: 16777212 total, 16776044  free ,     1168 used. 42127064 avail Mem 
 
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                        
30172 root      20   0 25.958g 0.021t   8868 S  10.3 34.6   1481:53 mongod

pidof查看进程PID

cpu使用率load average的简单理解

load average后面有由逗号分割的3列数字,分别代表了最近1分钟,5分钟,15分钟CPU的平均负载情况

如果是单核CPU的话,1.00就表示CPU已经满负荷了,

如果是多核CPU的话,load average达到CPU的核数即说明该CPU已经满负荷了,

如果是多颗物理CPU,则当load average达到所有物理CPU的总核数时,说明系统CPU满负荷了。

简而言之,CPU的核数即为我们根据load average衡量CPU负载的依据,当load average等于CPU的核数时,表示CPU在满负荷运行。

按大键盘上的数字键1(感叹号的1)可以查看每个CUP的使用率,top里显示的是把所有使用率加起来的,所以用top命令查看cpu利用率时会超过100%

wKiom1mcvpuTNwCWAAEKzT9cmTM555.jpg

核数可以通过命令cat /proc/cpuinfo | grep "core id" | uniq | wc -l查看数值, 这里不包含超线程技术HT虚拟出来的核心,因为超线程虚拟出来的核心性能不及真实核心的30%, 

1分钟的数据更能反映CPU负载的实时情况,而15分钟的数据则说明系统稳定在某一情况,更有指示价值,监视一个系统的负载情况的话最好是取15分钟的load average值。那么当CPU负载达到哪个值时,就该引起我们注意了呢?按照参考文章给的经验值是CPU核数乘以0.7,即如果CPU总核数为4,当load average上15分钟的数值达到2.8时,我们就该好好进系统看看了。


进程控制

1、程序后台运行

让操作在后台运行只需要在命令结尾加上符号&

1
2
3
[root@justin ~] # top &
[1] 4299
[root@justin ~] #

显示的信息为任务编号1和pid为4294

2、挂起进程:ctrl+z

当需要将当前在执行的命令暂停时直接按ctrl+z组合键就可以挂起当前进程,这种操作在需要暂停当前进程并进行其它操作时特别有用。

3、查看后台程序:

1
2
3
[root@justin ~] # jobs -l
[1]+  4299 停止 ( tty  输出)      top
[root@justin ~] #

4、将后台程序调入前台运行:fg 任务编号

1
[root@justin ~] # fg 1

5、终止进程

ctrl+c:当命令在前台执行过程中需要停止该进程可以直接按住该组合键

kill:当程序在后台运行我们只需要知道该进程的PID就可以终止该进

HUP (1)、KILL (9)、TERM (15)分别代表著重跑, 砍掉, 结束; 详细的信号可以用 kill -l

1
2
3
4
5
6
[root@justin ~] # jobs -l
[1]+  4436 停止 (信号)          top
[root@justin ~] # kill -9 4436
[root@justin ~] # jobs -l
[1]+  4436 已杀死                top
[root@justin ~] #

服务管理

1、serveice

过service命令可以查看(status)、启动(start)、停止(stop)或者重启(restart)服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@justin ~] # service httpd status
httpd is stopped
[root@justin ~] # service httpd start
Starting httpd: httpd: apr_sockaddr_info_get() failed  for  justin
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1  for  ServerName
                                                            [  OK  ]
[root@justin ~] # service httpd stop
Stopping httpd:                                            [  OK  ]
[root@justin ~] # service httpd start
Starting httpd: httpd: apr_sockaddr_info_get() failed  for  justin
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1  for  ServerName
                                                            [  OK  ]
[root@justin ~] # service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd: httpd: apr_sockaddr_info_get() failed  for  justin
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1  for  ServerName
                                                            [  OK  ]
[root@justin ~] #

2、chkconfig

chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。

133846496.png

1
2
3
4
5
6
7
8
9
10
[root@justin ~] # chkconfig --list httpd
httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@justin ~] # chkconfig --add httpd
[root@justin ~] # chkconfig httpd on
[root@justin ~] # chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@justin ~] # chkconfig --level 24 httpd off
[root@justin ~] # chkconfig --list httpd
httpd           0:off   1:off   2:off   3:on    4:off   5:on    6:off
[root@justin ~] #

1、如果添加服务时候提示:service httpd does not support chkconfig;可在#!/bin/bash 之后,添加以下两行

# chkconfig: 2345 10 90 

# description: httpd server ....

注意:chkconfig description后面有冒号,不能省略,否则也会报以上错误

其中2345是默认启动级别,级别有0-6共7个级别。

  等级0表示:表示关机   

  等级1表示:单用户模式   

  等级2表示:无网络连接的多用户命令行模式   

  等级3表示:有网络连接的多用户命令行模式   

  等级4表示:不可用   

  等级5表示:带图形界面的多用户模式   

  等级6表示:重新启动

10是启动优先级,90是停止优先级,优先级范围是0-100,数字越大,优先级越低。


2、如果使用服务时候提示:Warning: redis.service changed on disk. Run 'systemctl daemon-reload' to reload units.;可运行systemctl daemon-reload

1
2
3
4
5
[root@localhost app] # systemctl stop redis.service 
Warning: redis.service changed on disk. Run  'systemctl daemon-reload'  to reload  units .
[root@localhost app] # systemctl daemon-reload
[root@localhost app] # systemctl stop redis.service 
[root@localhost app] #





本文转自 justin_peng 51CTO博客,原文链接:http://blog.51cto.com/ityunwei2017/1313116,如需转载请自行联系原作者

相关文章
|
调度 Windows Perl
进程和计划任务管理
进程和计划任务管理
189 0
|
6月前
|
缓存 NoSQL Unix
【实战指南】守护进程服务实现
本文介绍了在Linux系统中实现守护进程异常重启的几种方案。通过理解僵死进程和信号处理机制,提出了基于SIGCHLD信号监听、轮询proc文件系统及waitpid接口的三种方法,并给出了C++实现代码。最终选择轮询方式以提升稳定性,确保服务进程在崩溃后能自动重启,保障系统可靠性。
387 66
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
1803 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
运维 监控 Linux
Linux操作系统的守护进程与服务管理深度剖析####
本文作为一篇技术性文章,旨在深入探讨Linux操作系统中守护进程与服务管理的机制、工具及实践策略。不同于传统的摘要概述,本文将以“守护进程的生命周期”为核心线索,串联起Linux服务管理的各个方面,从守护进程的定义与特性出发,逐步深入到Systemd的工作原理、服务单元文件编写、服务状态管理以及故障排查技巧,为读者呈现一幅Linux服务管理的全景图。 ####
|
存储 Linux Docker
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
关于如何在CentOS 7.6上安装Docker、介绍Docker存储引擎以及服务进程关系的实战案例。
812 3
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
|
Java 关系型数据库 MySQL
java控制Windows进程,服务管理器项目
本文介绍了如何使用Java的`Runtime`和`Process`类来控制Windows进程,包括执行命令、读取进程输出和错误流以及等待进程完成,并提供了一个简单的服务管理器项目示例。
250 1
|
SQL 自然语言处理 网络协议
【Linux开发实战指南】基于TCP、进程数据结构与SQL数据库:构建在线云词典系统(含注册、登录、查询、历史记录管理功能及源码分享)
TCP(Transmission Control Protocol)连接是互联网上最常用的一种面向连接、可靠的、基于字节流的传输层通信协议。建立TCP连接需要经过著名的“三次握手”过程: 1. SYN(同步序列编号):客户端发送一个SYN包给服务器,并进入SYN_SEND状态,等待服务器确认。 2. SYN-ACK:服务器收到SYN包后,回应一个SYN-ACK(SYN+ACKnowledgment)包,告诉客户端其接收到了请求,并同意建立连接,此时服务器进入SYN_RECV状态。 3. ACK(确认字符):客户端收到服务器的SYN-ACK包后,发送一个ACK包给服务器,确认收到了服务器的确
376 1
|
开发框架 安全 .NET
【权限提升】Win本地用户&进程注入&令牌窃取&AT&SC&PS服务命令
【权限提升】Win本地用户&进程注入&令牌窃取&AT&SC&PS服务命令
268 3
|
安全 Linux 应用服务中间件
操作系统引导过程 与 服务进程的控制
操作系统引导过程 与 服务进程的控制

热门文章

最新文章