一、HUP信号

  1. 当用户注销(logout)或者网络断开或者关闭终端时(一定是终端整体关闭,而不是单纯的exit)时,终端会收到Linux HUP信号,然后终端在结束前会关闭所有子进程。
  2. 如果我们想让进程在后台一直运行,不要因为用户注销(logout)或者网络断开、终端关闭而一起被干掉,那么我们有两种解决方案
  • 方案一:让进程忽略Linux HUP信号
  • 方案二:让进程运行在新的会话里,从而成为不属于此终端的子进程,就不会在当前终端挂掉的情况下一起被带走。

nohup命令

针对方案一,我们可以使用nohup命令,nohup的用途就是让提交的命令忽略hangup信号,该命令通常与&符号一起使用

  1. [root@@321 ~]# nohup ping www.baidu.com & > /root/1.txt &
    [3] 9948
  2. 查看当前终端9948的父PID

[root@@321 ~]# ps -elf | grep [p]ing
       4 S root       9937   9579  0  80   0 - 37492 poll_s 21:11 pts/1    00:00:00 ping www.baidu.com
       4 S root       9948   9579  0  80   0 - 37492 poll_s 21:17 pts/1    00:00:00 ping www.baidu.com
    3. 关闭当前终端,在另一终端查看它的父PID(这时我们会发现后台运行的ping进程依旧在运行,并且它的父进程PID号变成了             一,即init进程)

[root@@321 ~]# ps -elf | grep [p]ing
       4 S root       9937      1  0  80   0 - 37492 poll_s 21:11 ?        00:00:00 ping www.baidu.com
       4 S root       9948      1  0  80   0 - 37492 poll_s 21:17 ?        00:00:00 ping www.baidu.com

setsid命令

针对方案1,我们汉可以用setsid命令实现,原理与nohup是一样的,setsid直接将进程的父pid设置成1,即让运行的进程归属于init子进程,那么除非init结束,该子进程才会结束,当前进程所在的终端结束后并不会影响进程的运行。

在终端1中执行命令

  1. [root@@321 ~]# setsid ping www.baibu.com 也可以在后面加&符号
  2. 关闭终端1

  3. 在终端2查看

    [root@@321 ~]# ps -elf | grep [p]ing

    4 S root 18443 1 0 80 0 - 33160 skb_wa 17:40 ? 00:00:00 ping www.baibu.com

在子shell中提交任务

  1. 在终端1中执行命令

    [root@@321 ~]# (ping www.baibu.com &)

  2. 关闭终端1

  3. 在终端2查看

    [root@@321 ~]# ps -elf | grep [p]ing

    root 18443 1 0 80 0 - 33160 skb_wa 17:40 ? 00:00:00 ping www.baibu.com

screen命令

安装:yum install screen -y

运行命令

开启一个窗口并用-S指定窗口名,也可以不指定

例如:[root@@321 ~]# screen -S 窗口

如果非正常退出或关门窗口后,下次在进入可用以下命令

[root@@321 ~]# screen -r

There are several suitable screens on:

8381.窗口 (Attached)

8280.lili (Detached)

screen会帮我们管理运行的命令,退出screen,我们的命令还会继续运行

若关闭screen所在的终端,则screen程序的ppid变为1,所有screen不会死掉,

对应着它帮我们管理的命令也不会退出

注意:如果我们刚开始以经用screen -S xxx指定了名字,那么我们可以直接

screen -r xxx,就不用去找程序的id了

远程演示

在终端1

[root@@321 ~]# screen -S 远程连接

在终端2

[root@@321 ~]# screen -x 远程连接

右边的终端输入内容会同步到左边终端

jobs:查看在当前终端提交的后台进程(前提是必须连接到一台服务器上)

查看网络状态

netstat

[root@@321 ~]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      6350/rpcbind        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      6945/sshd           
-t :tcp协议

-u :udp协议

-l  :listen 监听状态

-n :不反解,不将IP地址解析为主机名,不将端口解析成协议名(80---》http)

proc文件系统

[root@@321 ~]# du -sh /root
100M    /root

内存:/proc/meminfo

#释放内存举例

[root@@321 ~]# free
              total        used        free      shared  buff/cache   available
Mem:         995896       97424      632300        7808      266172      727160
Swap:       2097148           0     2097148
[root@@321 ~]# sync
[root@@321 ~]# echo 3>/proc/sys/vm/drop_caches

内核启动参数:/proc/cmdline

root@@321 ~]# cat /proc/cmdline 
BOOT_IMAGE=/vmlinuz-3.10.0-957.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=zh_CN.UTF-8

[root@@321 ~]# uptime
 00:04:52 up 15:24,  1 user,  load average: 0.00, 0.01, 0.05

注意:当我们卸载/proc后

[root@@321 ~]# umount /proc -l

#下述命令都不可以

free -m

uptime

lscpu

toop

#重新挂载

[root@@321 ~]# mount -t proc proc /proc/

-t proc        指定文件系统类型

proc           文件系统,虚拟文件系统

/proc          挂载点

管理后台进程

[root@@321 ~]# sleep 300 &         #程序运行时,让其在后台执行

[1] 14378

[root@@321 ~]# sleep 300 &

[2] 14427

[root@@321 ~]# jobs           #中括号内编号就是当前作用编号,%1代表作用1

[1]- 运行中 sleep 300 &

[2]+ 运行中 sleep 300 &

[root@@321 ~]# bg %2          #让作业2在后台运行

-bash: bg: 任务 2 已在后台

[root@@321 ~]# fg %1            #将作业一调回前台

sleep 300

管道

什么是管道?

管道用于进程之间通信,详细的说,管道操作符号“|”,主要用来连接左右两个命令,将左侧命令的标准输出,交给右侧命令的标准输入

管道应用示例:

统计当前/etc/passwd中用户使用shell类型

[root@@321 ~]# awk -F: '{print $7}' /etc/passwd | sort |uniq -c

2 /bin/bash

1 /bin/sync

1 /sbin/halt

18 /sbin/nologin

1 /sbin/shutdown

xargs参数传递,主要让一些不支持管道的命令也可以使用管道技术

[root@@321 ~]# which cat | xargs ls -l
-rwxr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat
[root@@321 ~]# ls | xargs rm -fv

僵尸进程和孤儿进程

什么是僵尸进程 ?

僵尸进程就是子进程先于父进程运行完毕/死掉,那么Linux系统在清理子进程的时候,会将子进程占用的重型资源都释放掉(比如占用的内存空间、CPU资源、打开的文件等),但会保留一部分子进程的关键状态信息,比如进程号、退出状态、运行时间等,此时子进程就相当于死了但没死干净,因而得名“僵尸进程”。

分两种情况:

①一些水平良好的程序员开发的应用程序,会在父进程内考虑调用 wait

/waitpid来通知操作系统回收2僵尸进程,但是发起系统调用wait/waitpid

的时间可能慢了些,于是我们可以在Linux系统中查看僵尸进程状态

[root@@321 ~]# ps aux | grep [z]+

针对这种情况,可以发信号给父进程,通知它快点发起系统调用wait/waitpid

来清理僵尸的儿子 (kill -CHLD 父进程PID)

②一些初级程序员,根本不知道什么是僵尸进程,至于wait/waitpid的系统

调用更是没听说过,这个时候在开发的时候根本不会去管后台的程序运行

,以至于操作系统中的僵尸进程会堆积起来,此时我们的计算机会进入一

个奇怪的现象,就是内存充足、硬盘充足、CPU空闲,但是就是无法启动

新的进程,为啥?因为操作系统负责管理进程,每启动一个进程就分派一

个PID号,而PID号有限,会被僵尸进程占满。

针对这种情况,只有一种解决方案,就是杀死父进程,那么子进程会被Linux

系统中PID为1的顶级进程(init或systemd)接管,顶级进程会定期发起系统

调用wait /waitpid来通知操作系统清理僵尸进程。

孤儿进程

父进程先死掉,而他的一个或多个子进程还在运行,那么这些子进程将成为

孤儿进程。孤儿进程将被进程号为1的顶级进程(init或systemd)收养,并

由顶级进程对它们完成状态收集工作,所有僵尸进程在这种情况下是不存在

的存在的只有孤儿进程而已,孤儿进程生命周期结束自然会被顶级进程销毁

掉。

Linux运维篇之进程管理②相关推荐

  1. 《Linux运维篇:Linux系统运维指南》

    一.Linux运维之知识篇 二.Linux运维之系统篇 <Linux运维总结:使用U盘制作Linux镜像> <Linux运维实战:创建LVM挂载到指定目录> <Linux ...

  2. linux运维基础[系统磁盘管理]——————磁盘的物理结构[内部结构、外部结构、计算磁盘大小]

    文章目录 1. 磁盘的外部结构 2.磁盘的内部结构 3. 计算一个磁盘的大小 1. 磁盘的外部结构 我们首先查看一个磁盘的结构,然后我们来进行一一的解读: 磁盘的主轴:决定磁盘的转速,转的越快,就会效 ...

  3. linux运维基础[系统磁盘管理]——————存储设备的识别、df、du、fsck

    文章目录 1. 本地存储设备的识别 1.1 fdisk -l 1.2 cat /proc/partition 1.3 blkid 1.4 df 2.文件系统常用命令 2.1 df 2.1.1 -h 2 ...

  4. 《Linux运维实战:Centos7.6基于ansible一键离线部署mongodb4.2.23容器版副本集群》

    一.部署背景 由于业务系统的特殊性,我们需要针对不同的客户环境部署 mongodb副本集群,由于大都数用户都是专网环境,无法使用外网,为了更便捷,高效的部署,针对业务系统的特性,我这边编写了基于ans ...

  5. 《Linux运维实战:使用Percona XtraBackup物理备份与恢复Mysql数据》

    一.Percona XtraBackup工具介绍 Percona XtraBackup是世界上唯一开源.免费的MySQL热备份软件,可为InnoDB和XtraDB数据库执行非阻塞备份.Percona ...

  6. 《Linux运维实战:Nginx服务报错unknown directive stream》

    一.场景一 Ubuntu 18.04 LTS操作系统,安装完Nginx之后,由于业务需求,代理转发代理TCP stream {server {listen 9000;proxy_connect_tim ...

  7. 详解Linux运维工程师打怪升级篇

    详解 Linux 运维工程师打怪升级篇 积累经验篇 做运维也快4年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师 是从一个呆逼进化为苦逼再成长为牛逼 ...

  8. Linux运维-服务器系统篇

    Linux运维-服务器系统篇 开篇导读: 本篇博文是此系列教程的第二课,在这一课中将大概的介绍一下服务器上的操作系统,了解一下它的基本概念和发展历程. 服务器系统的概念和作用 如何理解服务器操作系统? ...

  9. xenserver 虚拟机扩容lvm磁盘分区的方法_从零开始学Linux运维|35.LVM(逻辑卷管理)的创建...

    简单来说 LVM是建立在硬盘和分区之上的一个逻辑层,提高磁盘分区管理的灵活性 如果没有使用LVM,我们直接访问文件系统读取硬盘内容 使用了LVM我们是通过逻辑卷的东西来读取硬盘内容 使用LVM增加一个 ...

最新文章

  1. python连接es数据库_Python Elasticsearch API操作ES集群
  2. CSDN编程挑战——《交替字符串》
  3. Java不是true值不变_Java语言中String a=a;String b=a; 为什么 a==b 值为 true?
  4. python windows记事本_pywinauto自动化操作记事本
  5. 2021计算机三级数据库大题总结
  6. java 代码混淆 开源_java代码混淆(使用 ProGuard 工具)
  7. 因子分解机(FM) +场感知分解机 (FFM) 入门
  8. 基于VMD的小波软阈值的局方信号降噪方法研究
  9. Charles开启代理后手机无法上网
  10. 示波器电流探头可分为无源和有源两类,它们的区别是什么?
  11. 基于神经网络的预测控制,神经网络预测系统应用
  12. PW系列 | 用windres 编译.rc 资源文件
  13. 上古卷轴3晨风详尽指引攻略2
  14. 全国最强计算机的大学排名,全国高校计算机学科实力最新排名,这19所高校最受认可!...
  15. pascal java_GitHub - DronPascal/Java-Basics
  16. 低代码平台,企业服务新战场
  17. 局部二值模式(Local Binary Patterns)纹理灰度与旋转不变性
  18. 【Unity3D软硬件】Unity3D与串口通信 SerialPort类完全教程
  19. 车载毫米波雷达天线罩设计问题
  20. php正则中不支持g修饰符吗,Pattern Modifiers – 规则表达式的修饰符(转载)发现PHP里有些正则表达式的应用和PERL里的不一样。。所…-PHP教程,PHP应用...

热门文章

  1. 小米3联通电信版解锁(2013062 2013063)刷机包可解账号锁
  2. MU计算机里代表什么,计算器上M+、M-、MU、GT等分别代表意思-mu代表啥
  3. tomcat安装不上
  4. Java 读取 Excel 模板,将数据填入Excel表格,后转换为PDF文件(实用)
  5. Oracle11g导入DMP文件并导出为CSV文件过程全纪录
  6. 观成科技荣获中国网络安全产业联盟 “先进会员单位”并晋升理事单位
  7. git重置commit时的注释
  8. 一千万人都在等小黄车OFO退押金
  9. BIT2023 智慧社区综合管理系统-一周目
  10. 前后端分离时ajax发送请求时后端能接送,但是前端的response为空时