进程管理-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 
主要作用是让一些不支持管道的命令可以使用管道技术
 
 
 
 
六.  僵尸进程与孤儿进程
 

 

 

 

posted @ 2020-11-05 17:54  飞天遁地猪  阅读(469)  评论(0编辑  收藏  举报