前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux - 进程和服务(上篇)

linux - 进程和服务(上篇)

原创
作者头像
stark张宇
发布2024-03-10 20:49:50
3350
发布2024-03-10 20:49:50
举报
文章被收录于专栏:stark张宇stark张宇

概述

接着之前的Linux系列篇,第二篇主要介绍进程和服务,从进程到服务,由浅入深的知识系统的介绍。

进程、程序和服务

Linux系统只认识二进制文件,那么当我们要让系统工作的时候,启动一个二进制文件,这个二进制文件就是程序

程序一般放置在屋里磁盘中,然后通过用户的执行来触发,触发后会加载到内存中称为一个个体,那就是进程

为了让操作系统可以管理这个进程,进程会给予执行者权限/属性等参数,以及进程所需的脚本或数据等,最后在给予一个PID。

我们将它在后台启动并一直持续不断地运行,常驻在内存当中的进程,被我们称为服务

任务管理(job control)

有时我们想把服务放入后台执行,有多种办法,下面利用后台管理任务和数据流,把输出的信息都重定向到/tmp/log.txt文件中,96就是这次进程执行的PID。

代码语言:bash
复制
[root@57926ad08c2f /]# tar -zpcvf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 &
[1] 96

1.查看目前后台的任务状态

jobs 参数

  • -l: 除了列出Job number与命令串之外,同时列出PID的号码
  • -r: 仅列出正在后台的run的任务
  • -s:仅列出正在后台当中暂停的任务
代码语言:bash
复制
# jobs -l
[1]+    96 Done  tar -zpcvf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1

2.将后台任务拿到前台来处理 fg

代码语言:bash
复制
[root@57926ad08c2f /]# vim /run.sh &
[1] 98
[root@57926ad08c2f /]# jobs -l
[1]+    98 Stopped (tty output)    vim /run.sh
[root@57926ad08c2f /]# fg %1
vim /run.sh
[root@57926ad08c2f /]#  

3.让任务在后台下的状态变成运行中 bg

4.管理后台当中的任务 kill

kill的使用语法kill -signal %jobnumber,使用kill -l来查看信号的列表,我们只介绍最常用的命令:

  • -1 : 重新读取一次参数的配置文件
  • -2 : 代表由键盘输入ctrl+c同样的操作
  • -9 : 立刻强制删除一个任务
  • -15 : 以正常的进程方式终止一项任务,与-9是不一样的
代码语言:bash
复制
[root@57926ad08c2f /]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX

进程管理

进程管理最好用的三个命令分别是ps aux 、ps axjf 、pstree,它们都是查看系统进程里很高效的工具。

  • ps aux : 查看所有的系统进程
  • ps axjf :列出类似进程树的进程显示,以下面的php-fpm为例
代码语言:bash
复制
[root@cc ~]# ps axjf | grep php
    1  1573  1573  1573 ?           -1 Ss       0   8:35 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
 1573  8530  1573  1573 ?           -1 S       99   0:01  \_ php-fpm: pool www
 1573  8574  1573  1573 ?           -1 S       99   0:00  \_ php-fpm: pool www
 1573  8611  1573  1573 ?           -1 S       99   0:00  \_ php-fpm: pool www
 8850  9209  9208  8850 pts/1     9208 S+       0   0:00          \_ grep --color=auto php
  • pstree 也是一个超级好用的命令,pstree如果不存在,需要使用yum install -y pstree安装。
代码语言:bash
复制
[root@cc ~]# pstree -pua | grep php
  |-php-fpm,1573
  |   |-php-fpm,8713,nobody
  |   |-php-fpm,8715,nobody
  |   |       |-grep,9415 --color=auto php
僵尸进程

僵尸进程,僵尸进程的原因在于该进程应该已经执行完毕,或是应该终止了,但是该进程的父进程却无法完整的该进程结束掉,而造成该进程一直存在于内存当中。

如果发现在某个cmd后面接上<defunct>时,就代表该进程一直存在于内存当中。

系统不稳定的时候就容易造成所谓的僵尸进程,记得要找出该进程的父进程,然后好好追踪进行主机的环境优化,看看有什么地方需要改善,不要只是直接的kill掉。

查看系统的资源信息

这里我们介绍两个常用的命令,freenetstat

1.查看系统内存资源 free

free 参数详解:

  • -b: 直接输入free时,显示的单位是KBytes,我们可以使用b或者m
  • -t: 在输出的最终结果,显示物理内存与swap的总量
  • -s: 可以让系统不断刷新数据,20秒刷新数据的命令是free -m -s 20

2.追踪网络或socket文件

  • -a: 将目前系统上所有的连接、监听、socket信息都列出来。
  • -t: 列出tcp网络包的信息。
  • -u: 列出udp网络包的信息。
  • -l: 列出目前正在网络监听的服务。
  • -p: 列出该网络服务进程的PID。

比如统计服务器上的连接数,18101和3306是端口号

代码语言:bash
复制
netstat -ant|grep ESTABLISHED| wc -l;
netstat -ant|grep ESTABLISHED|grep 18101 |wc -l;
netstat -ant|grep ESTABLISHED|grep 3306 | wc -l

服务

早期System V的init管理操作系统

使用init管理服务,所有的服务启动脚本放置于/etc/ini.d/目录,基本上都是使用bash shell所写成的脚本程序,要想到lnmp的一键安装包(现在也感觉lnmp超级方便),以服务器上的Nginx和php为例:

代码语言:bash
复制
[root@cc ~]# /etc/init.d/nginx
Usage: /etc/init.d/nginx {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}

[root@cc ~]# /etc/init.d/php
Usage: /etc/init.d/php {start|stop|restart}

制定运行级别默认要启动的服务,以Nginx服务为例

  • chkconfig nginx on : 默认启动
  • chkconfig nginx off :默认不启动
  • chkconfig --list nginx : 查看默认启动状态

systemd 使用的unit分类

从CentOs7.X以后,服务管理从init转向到systemd的方式,一般来说服务的启动有两个阶段,一个是开机要不要启动服务,一个是现在要不要启动这个服务。

systemctl cmd

  • start : 立刻启动后面的unit
  • stop: 立刻关闭后面的unit
  • restart : 立刻重启后面的unit,立即执行stop,再start的意思
  • reload : 不关闭后面接的unit的情况下,重新加载配置文件,让设置生效
  • enable : 设置下次开机时,后面接的unit会被启动
  • disenable : 设置下次开机时,后面的unit不会被启动
  • status : 查看unit的状态
  • is_active: 目前有没有正在进行中
  • is_enable: 开机时有没有默认要启动这个unit

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
    • 进程、程序和服务
      • 任务管理(job control)
        • 进程管理
          • 僵尸进程
        • 查看系统的资源信息
        • 服务
          • 早期System V的init管理操作系统
            • systemd 使用的unit分类
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
            http://www.vxiaotou.com