优先级设置nice值 ; 给进程发送信号kill、nohup、setsid、 screen;查看网络状态netstat;proc文件系统

shell管理进程

一、优先级设置

可以在启动进程时?nice命令设置设置优先级

设置进程的nice值
# 设置进程的优先级
nice [-n <优先级>] [--help] [--version] [执?指令]
nice -n -11 bash test.sh

#选项介绍
若 nice命令未指定优先级的调整值,则以缺省值10来调整程序运?优先级,既在当前程序运?优先级基础之上增加10。
 -n <优先级> 指定设置优先级; 
	普通用户:(0~19)
	超级用户:(-20~19)
 --help 帮助信息;
 --version 版本信息;
 
# 执?范例:让命令以新的优先级执?
[root@localhost ~]# $ nice -n 5 ls # nice -n -20 命令
 
# ps -l 命令
其中的?个重要信息有:
UID : 代表执?者的身份
PID : 代表这个进程的代号
PPID :代表这个进程是由哪个进程发展衍??来的,亦即?进程的代号
PRI :代表这个进程可被执?的优先级,其值越?越早被执?
NI :代表这个进程的nice值
PRI即进程的优先级,此值越?进程的优先级别越?。?NI,也就是我们所要说的nice值(通过nice
命令设置),其表示进程可被执?的优先级的修正数值。如前?所说,PRI值越?越快被执?,那么加
?nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice。
所以,nice命令设置的优先级不是程序最终的优先级,?只是优先级的修正数值。
renice命令允许?户修改?个正在运?的进程的优先权。
	
# 对已运?的进程设置新的优先级
renice [设置优先级] pid
[root@localhost ~]# renice -20 11111

二、给进程发送信号

kill命令
[root@localhost ~]# kill -l # 列出所有?持的信号
=====================解释==========================
# HUP(1): 1、挂起信号 2、往往可以让进程重新加载配置
本信号在?户终端连接(正常或?正常)结束时发出, 通常是在终端的控制进程结束时, 通知同?session内的各个作业, 这时它们与控制终端不再关联。
登录Linux时,系统会分配给登录?户?个终端(Session)。在这个终端运?的所有程序,包括前台进程组和后台进程组,?般都 属于这个 Session。当?户退出Linux登录时,前台进程组和后台有对终端输出的进程将会收到SIGHUP信号。这个信号的默认操作为终?进程,因此前台进 程组和后台有终端输出的进程就会中?。不过,可以捕获这个信号,?如wget能捕获SIGHUP信号,并忽略它,这样就算退出了Linux登录,wget也 能继续下载。此外,对于与终端脱离关系的守护进程,这个信号?于通知它重新读取配置?件。
# INT(2): 中断, 通常因为按下ctrl+c?产?的信号,?于通知前台进程组终?进程。
# QUIT(3): 退出,和SIGINT类似, 但由QUIT字符(通常是Ctrl-\)来控制. 进程在因收到SIGQUIT退出时会产?core?件, 在这个意义上类似于?个程序错误信号。
# TSTP(20): 停?进?运?,通常因为按下ctrl+z?产?的信号
# KILL (9)?来?即结束程序的运?. 本信号不能被阻塞、处理和忽略。如果管理员发现某个进程终?不了,可尝试发送这个信号。
# TERM(15):终?,是不带参数时kill默认发送的信号,默认是杀死进程,与SIGKILL不同的是该信号可以被阻塞和处理。通常?TERM信号来要求程序??正常退出,如果进程终?不了,我们才会尝试SIGKILL。
# CONT(18) 被暂停的进程将继续恢复运?
# SIGSTOP(19) 暂停进程
# SIGCHLD?进程结束时, ?进程会收到这个信号。如果?进程没有处理这个信号,也没有等待(wait)?进程,?进程虽然终?,但是还会在内核进程表中占有表项,这时的?进程称为僵? 进程。这种情 况我们应该避免(?进程或者忽略SIGCHILD信号,或者捕捉它,或者wait它派?的?进程,或者?进程先终?,这时?进程的终??动由init进程来接管)。
# 参数
中断信号
	ctrl + c
	ctrl + z

	INT(2) : 
		kill -[信号名称|信号ID] pid
		
		kill -SIGINT  PID
		kill -INT     PID
		kill -2       PID 

退出信号:
	ctrl + d

暂停信号:将进程暂停
	SIGTSTP(20)
		kill -20 PID 
		kill -SIGTSTP PID 
		kill -TSTP PID

杀死进程信号
	SIGKILL
		kill -9 PID 
		kill -SIGKILL PID
		kill -KILL PID
注:不能够被捕捉

终止信号
	SIGTREM
		kill -15 PID 
		kill -SIGTERM PID
		kill -TERM PID

注:优雅终止进程

暂停和恢复信号
	SIGCONT : 恢复
	SIGSTOP :暂停

重载信号
	SIGHUP(1)
关于hup信号
我们知道,当?户注销(logout)或者?络断开或者终端关闭(注意注意注意,?定是终端整体关闭,不是单纯的exit)时,终端都会收到Linux HUP信号(hangup)信号,然后终端在结束前会关闭其所有?进程。
如果我们想让我们的进程在后台?直运?,不要因为?户注销(logout)或者?络断开或者终端关闭??起被?掉,那么我们有两种解决?案
?案1:让进程忽略Linux HUP信号
?案2:让进程运?在新的会话?,从?成为不属于此终端的?进程,就不会在当前终端挂掉的情况下?起被带?。
nohup命令

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

nohup 的使?是?分?便的,只需在要处理的命令前加上 nohup 即可,但是 nohup 命令会从终端解除进程的关联,进程会丢掉STDOUT,STDERR的链接。标准输出和标准错误缺省会被重定向到nohup.out ?件中。?般我们可在结尾加上"&"来将命令同时放?后台运?,也可?">filename2>&1"来更改缺省的重定向?件名。
nohup [执行的命令] &
后台启动,会在当前目录生成一个nohub.out文件,用于执行的命令的输出
要退出会话窗口最好先exit或者logout   或使用nohup
[root@localhost ~]# nohup ping www.baidu.con &>/dev/null &  #即使关闭终端2,子进程不会kill
setsid命令

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

1、在终端2中执?命令
[root@egon ~]# setsid ping www.baidu.com # 也可以在后?加&符号,丢后台运行 2、关闭终端2
3、在终端1中查看
[root@egon ~]# ps -ef |grep [p]ing
root 102335 1 0 17:53 ? 00:00:00 ping www.baidu.com
 setsid : 实际上开了一个孤儿进程
 
等价于[root@egon ~]# (ping www.baidu.com) #在子shell中提交任务
screen命令
# 1、安装
[root@egon ~]# yum install screen -y

# 2、运?命令
?式?:开启?个窗?并?-大S指定窗?名,也可以不指定
[root@egon ~]# screen -S egon_dsb

Screen将创建?个执?shell的全屏窗?。你可以执?任意shell程序,就像在ssh窗?中那样。
在该窗?中键?exit则退出该窗?,如果此时,这是该screen会话的唯?窗?,该screen会话退
出,否则screen?动切换到前?个窗?。

?式?:Screen命令后跟你要执?的程序
[root@egon ~]# screen vim test.txt
Screen创建?个执?vim test.txt的单窗?会话,退出vim将退出该窗?/会话。

# 3、原理分析
screen程序会帮我们管理运?的命令,退出screen,我们的命令还会继续运?,若关闭screen所在
的终端,则screen程序的ppid变为1,所以screen不会死掉,对应着它帮我们管理的命令也不会退
出测试略

# 4:重新连接会话
在终端1中运?
[root@egon ~]# screen
[root@egon ~]# n=1;while true;do echo $n;sleep 1;((n++));done
[root@egon ~]# 按下ctrl+a,然后再按下ctrl+d,注意要连贯,?别哆嗦,
[root@egon ~]# 此时可以关闭整个终端,我们的程序并不会结束
打开?个新的终端
[root@egon ~]# screen -ls
There is a screen on:
 109125.pts-0.egon (Detached) 1 Socket in /var/run/screen/S-root. [root@egon ~]# screen -r 109125 # 会继续运?
[root@egon ~]#
注意:如果我们刚开始已经?screen -S xxx指定了名字,那么我们其实可以直接
screen -r xxx ,就?须去找进程id了
远程演示
# 在终端1: [root@egon ~]# screen -S egon_av
# 开启?个新的终端,在该终端执?的命令,终端1会同步显示
[root@egon ~]# screen -x egon_av

三、查看网络状态

netstat
netstat主要用来查询系统端口相关问题

注:要使用netstat,需要安装yum install -y net-tools

# netstat常用参数
-t : 打印tcp链接的进程
-u : 打印UDP链接的进程
-l : 监听
-p : 打印进程的PID
-n : 不反解,不将ip地址解析成域名同时不将端口解析成对应的协议名称

netstat -nutlp
[root@tianyun ~]# netstat -tnlp # 查看正在监听的,且使?tcp协议的进程

[root@egon ~]# netstat -an |grep :22  #查看端口号
[root@egon ~]# netstat -an |grep :80
[root@egon ~]# lsof -i:22

四、proc文件系统

[root@localhost ~]# du -sh /proc

cpu:/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

内存:/proc/meminfo

# 查看内存
[root@egon ~]# less /proc/meminfo
[root@egon ~]# free -wm
[root@egon ~]# free -m
需要注意的是
free表示的是当前完全没有被程序使?的内存;
?cache在有需要时,是可以被释放出来以供其它进程使?的(当然,并不是所有cache都可以释
放,?如当前被?作ramfs的内存)。
?available才是真正表明系统?前可以提供给新启动的应?程序使?的内存。
/proc/meminfo从3.14内核版本开始提供MemAvailable的值;在2.6.27~3.14版本之间,是
free程序??计算available的值;早于2.6.27版本,available的值则同free?样。
[root@egon ~]# man free # 看?眼写的清清楚楚

内核启动参数:/proc/cmdline

[root@localhost ~]# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.10.0-1127.13.1.el7.x86_64 root=UUID=84b5cfa6-b0dc- 4d7a-a8fd-0302f0eb2f04 ro rhgb quiet LANG=zh_CN.UTF-8 
[root@localhost ~]# uptime
17:42:40 up 1 day, 1:33, 2 users, load average: 0.00, 0.01, 0.05

优先级设置nice值 ; 给进程发送信号kill、nohup、setsid、 screen;查看网络状态netstat;proc文件系统

上一篇:cgi程序读取post发送的特殊字符,尤其适合于微信公众平台开发中发送被动消息


下一篇:django--url 匹配,是个惰性匹配,匹配到前部分后就不会再接着匹配