• 进程管理-2(HUP信号,网络状态命令,proc文件系统,后台进程管理命令,管道技术,僵尸进程与孤儿进程)


    一. 关于HUP信号

    当用户注销(logout)或者网络断开或者终端关闭时,终端收到Linux HUP信号,然后终端在结束会前会关闭其所有子进程.如果我们想让我们的进程在后台一直运行,不要因为用户注销或者网络断开或者终端关闭而一起被关闭,要么让进程忽略Linux HUP信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程.

    1.nohup 

    nohup的用途就是让提交的命令忽略hangup信号,该命令通常与&符号(把在前台执行的命令放入后台)一起使用.
    用法: 只需在要处理的命令前加上nohup , nohup命令会从终端解除该进程的关联.

    nohup把标准输出和标准错误会被重定向到 nohup.out 文件中,可以用"&>filename"来更改重定向的文件名(如图).

    nohup运行示例:

    在终端1执行ping命令并放入后台,在终端2上查看ping进程的pid和ppid

    关闭终端1后,查看ping进程依然在运行,但是它的ppid(父进程pid号)变成了1(systemd)

    2. setsid

    setsid是直接将进程的ppid(即父进程的pid)设置成1,让运行的进程归属于systemd的子进程,除非systemd结束,该子进程才会结束,当前进程所在的终端结束并不会影响该进程的运行.

    终端1执行命令,并关闭终端1:
    [root@egon ~]# setsid ping www.baidu.com
    终端2中查看:
    [root@egon ~]# ps -ef |grep [p]ing
    root 102335 1 0 17:53 ? 00:00:00 ping www.baidu.com
     
    3.在子shell中提交任务
    在终端1执行命令,并关闭终端1:
    [root@egon ~]# (ping www.baidu.com &)
    在终端2中查看:
    [root@egon ~]# ps -ef |grep [p]ing
    root 102361 1 0 17:55 ? 00:00:00 ping www.baidu.com
    可以看到进程的ppid为1(即systemd的pid),因此并不属于当前终端的子进程,也就不会受到当前终端的hup信号影响.
     
    4.screen
    screen程序会帮我们管理运行的命令,退出screen,我们的命令还会继续运行,若关闭screen所在的终端,则screen程序的ppid变为1,所以screen不会死掉,对应它帮我们管理的命令也不会退出.安装:yum install screen -y
    命令选项:
    -ls 列出现有的screen会话
    -r 重新连接一个断开的会话
    -S 创建screen会话时,为会话指定一个名字
    -wipe 删掉无法连接的会话
    -x 会话共享演示
     
    运行命令:
    方法一# 开启一个窗口,也可以使用-S指定窗口名
    screen -S 窗口名   或者  screen 
    [root@egon ~]# screen -S egon_dsb
    创建一个执行shell的全屏窗口,可以执行任意shell程序,在该窗口中输入exit则退出该窗口.
     
    方法二# screen命令后面加上要执行的程序
    [root@egon ~]# screen vim test.txt
    screen创建一个执行vim test.txt的单窗口,退出vim将会退出该窗口.
     
     
     

    二. 查看网络状态

    netstat

    -t tcp协议

    -u udp协议

    -l listen

    -p pid

    -n 不反解,不降ip地址解析为主机名,不将端口号解析成协议名.

    [root@tianyun ~]# netstat -tnlp 查看正在监听的,且使用tcp协议的进程
     
     
     
    三. proc文件系统
     
    1. cpu信息:  cat /proc/cpuinfo
    [root@localhost ~]# grep "processor" /proc/cpuinfo # 逻辑CPU个数
    processor : 0
    [root@localhost ~]# grep "physical id" /proc/cpuinfo # 物理cpu个数
    [root@localhost ~]# grep "cpu cores" /proc/cpuinfo # cpu核数
    cpu cores : 1
     
    [root@localhost ~]# cat /proc/cpuinfo
    ==flags
    lm (64位)
    vmx 支持虚拟化 Intel
    svm 支持虚拟化 AMD
    [root@localhost ~]# egrep --color 'lm|vmx|svm' /proc/cpuinfo
    [root@localhost ~]# lscpu
     
    2. 内存信息: /proc/meminfo 
    查看内存:
    [root@egon ~]# less /proc/meminfo
    [root@egon ~]# free -wm
    total used free shared buffers
    cache available
    Mem: 1980 192 1713 9 0
    74 1671
    Swap: 1023 0 1023
    [root@egon ~]# free -m
    total used free shared buff/cache
    available
    Mem: 1980 192 1713 9 74
    1672
    Swap: 1023 0 1023
    注意:
    free表示的是当前完全没有被程序使用的内存,buffer/cache在有需要的时候,可以释放出来供其他进程使用,但并不是所有cache都可以释放.
    而available才是真正表明系统目前可以提供给新启动的应用程序使用的内存.
    释放buffer/cache方法:
    1.free -wm 查看内存信息
    2.执行sync(多执行几遍),把buffer里面的数据刷入硬盘
    3.echo 3 > /proc/sys/vm/drop_caches
     
     
     
    四. 后台进程管理
    &      将程序在后台执行
    [root@localhost ~]# sleep 5000 &
        
    Ctrl+z 将前台的程序暂停,并挂到后台
    jobs 查看当前终端后台运行的程序
    [root@localhost ~]# jobs    中括号内的编号就是作业编号,%1代表作业1
    [1]- 运行中 sleep 5000 &
    [2]+ 已停止 sleep 4000
    bg %2 让作业2在后台运行
    fg %1  让作业1调回到前台
    kill -9 %1杀掉作业1
     
     
     
    五. 管道
     
    1.什么是管道
    2.管道中的tee技术

    3. xargs 
    主要作用是让一些不支持管道的命令可以使用管道技术
     
     
     
     
    六.  僵尸进程与孤儿进程
     

     

  • 相关阅读:
    用windows公文包实现不同盘符两个文件文件夹文件同步
    flask0.1版本源码浅析——Request
    flask0.1版源码浅析——url分配处理
    itertools内置库
    nltk简要笔记
    python2.x编码问题-转载
    python函数中的默认参数问题
    中文分词模块--jieba笔记
    模拟登陆国内著名知识交流网站
    http协议简介--转载
  • 原文地址:https://www.cnblogs.com/allenzhu128/p/13933028.html
Copyright © 2020-2023  润新知