进程

第1章 管理进程状态

当程序运行为进程后,如果希望停止进程,怎么办呢?那么此时我们可以使用linux的kill命令对进程发送关闭新号,当然除了kill还有killall pkill

1.1  使用kill –l列出当前系统所支持的信号

[root@oldboyedu-lnb~]# 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 

虽然Linux信号很多,但是我们仅仅使用最常用的3个信号

1.1.1  SIGHUP 重新加载配置文件                        1  类似于reload

1.1.2  SIGKILL 强制杀死进程                               9

1.1.3  SIGTERM 终止进程,默认kill使用该信号 15

[root@oldboyedu-lnb~]# ps axu|grep nginx   
root     15688  0.0  0.1  87384  1132 ?        Ss   12:19   0:00 nginx: master process /usr/sbin/nginx
nginx    15689  0.0  0.3  89096  3176 ?        S    12:19   0:00 nginx: worker process
root     15691  0.0  0.0 112660   968 pts/3    R+   12:19   0:00 grep --color=auto nginx

# 发送重新加载信号 nginx配置文件发生改变,可用此重新加载

[root@oldboyedu-lnb~]# kill -1 15688
[root@oldboyedu-lnb~]# ps axu|grep nginx
nginx    15692  0.0  0.3  89376  3648 ?        S    12:19   0:00 nginx: worker process
root     15722  0.0  0.0 112660   968 pts/3    R+   12:20   0:00 grep --color=auto nginx
发送停止信号 kill pid
[root@oldboyedu-lnb~]#  kill 15692

强制终止服务

kill -9 15692

1.2  Linux系统中killall,pkill命令用于杀死指定名字的进程,我们可以使用kill命令杀死指定进程的PID的进程,killall和pkill直接杀进程而不需要查pid

[root@oldboyedu-lnb~]#  killall nginx
[root@oldboyedu-lnb~]#  pkill nginx
使用pkill踢出从远程登录到本机的用户,终止pts1上所有进程,用户强制退出
[root@oldboyedu-lnb~]# pkill -9 -t pts/1
pkill和killall不好用 杀不掉进程 使用进程号的方式才能杀
如何批量杀死httpd所有的进程号
[root@oldboyedu-lnb ~]# ps axu|grep -v grep|grep httpd|awk '{print $2}'|xargs kill -9

第2章 管理后台进程

2.1  后台进程

进程会在终端前台运行,一旦关闭终端,进程随着结束,此时希望进程在后台运行不退出,这样关闭终端也不影响进程的正常运行

2.2  如何把程序放在后台

# 把进程放入后台运行 使用 &
[root@oldboyedu-lnb ~]#  sleep 3000 &
[1] 15909
#把进程挂起放在后台
[root@oldboyedu-lnb ~]#  sleep 4000
[3]+  Stopped           sleep 4000
[root@oldboyedu-lnb ~]#
# jobs 显示在后台运行的程序
[root@oldboyedu-lnb ~]#  jobs
[1]-  Running               sleep 3000 &
[2]+  Running              sleep 4000 &
# 让作业2在后台运行
[root@oldboyedu-lnb ~]#  bg %2
[2]+ sleep 4000 &
[root@oldboyedu-lnb ~]#  jobs
[1]-  Running                 sleep 3000 &
[2]+  Running                 sleep 4000 &
将作业1掉回到前台运行
[root@oldboyedu-lnb ~]# fg %1
sleep 3000
# 终止后台PID为2的进程
[root@oldboyedu-lnb ~]#  kill %2
[root@oldboyedu-lnb ~]#  jobs   
[1]+  Stopped                 sleep 3000
[2]-  Terminated              sleep 4000
# & 后台运行
for i in {1..10};do echo $i;done &   # 内容还是输出到屏幕
for i in {1..10};do echo $i;done &>/dev/null & # 内容定向到空

2.3  Screen的使用 常用

2.3.1  安装

yum –y install screen

2.3.2  使用方法:

# screen 指定一个任务名称后进入到一个新bash

       # screen 指定一个任务名称后进入到一个新bash中

   screen -S wget_jenkins

# 在新bash中执行一条下载命令

wget https://pkg.jenkins.io/redhat-stable/jenkins-2.190.1-1.1.noarch.rpm

# 平滑退出screen 不会终止任务,如果使用exit则退出

ctrl+a+d   # 平滑退出screen任务

# 查看正在运行的screen有哪些任务

[root@oldboyedu-lnb ~]# screen -list
There is a screen on:
43698.wget_jenkins      (Detached)
1 Socket in /var/run/screen/S-root.
# 进入正在执行的screen任务中 或者使用PID即可进入
[root@oldboyedu-lnb ~]# screen -r wget_jenkins

2.4  进程的优先级

2.4.1  在启动进程时,为不同的进程使用不同的调度策略

nice 值越高 表示优先级越低,例如+19 该进程容易将CPU使用量让给其他进程

nice值越低 表示优先级越高,例如-20, 该进程更不倾向于让出CPU

使用top或ps命令查看进程的优先级

2.4.1.1   # 使用top可以查看nice优先级 NI:实际nice级别,默认是0 动态修正CPU调度。

范围(-20~19)。越大,cpu调度越一般,越小,cpu调度越偏向它。一般用于后台进程,调整也是往大了调,用来给前台进程让出CPU资源

PR: 优先级 显示nice值,PR默认是20,越小,优先级越高。修改nice可以同时修改PR   -20映射到0, +19映射到39 

2.4.1.2   使用ps查看进程优先级

[root@oldboyedu-lnb~]# ps -axo command,nice|grep sshd|grep -v grep
/usr/sbin/sshd -D           0
sshd: root@pts/0            0
sshd: root@pts/1            0

2.5  nice指定程序的优先级,语法格式nice  -n 优先级数字 进程名称

 #开启vim并指定程序优先级为-5  并查看进程优先级

[root@oldboyedu-lnb~]# nice -n -5 vim &
[1] 2549
[root@oldboyedu-lnb~]# ps -axo pid,command,nice|grep 2549
2549 vim                          -5
2551 grep --color=auto 2549        0
[1]+  Stopped                 nice -n -5 vim

2.6  # renice命令修改一个正在运行的进程优先级

语法格式 renice –n 优先级数字 进程 pid

2.6.1  查看sshd进程当前的优先级状态

[root@oldboyedu-lnb~]# ps axo pid,command,nice|grep sshd
 1114 /usr/sbin/sshd -D             0
 30865 sshd: root@pts/0            0

2.6.2  调整sshd主进程的优先级

[root@oldboyedu-lnb~]#  renice -n -20 1114
1114 (process ID) old priority 0, new priority -20
exit 退出当前bash

登陆查看调整或的优先级 再次登陆后会由主进程fork子进程 子进程会继承主进程的优先级

[root@oldboyedu-lnb~]#  ps axo pid,command,nice|grep sshd
1114 /usr/sbin/sshd -D        -20
 43747 sshd: root@pts/0        -20
 43770 grep --color=auto sshd    -20

2.7  扩展: python程序

py aaa.py ccc.py bbb.py

如何启动py程序

nohup count.py –ip –port –redis –mysql &
nohup count.py &
nohup count.py &
nohup count.py &
写入shell脚本 执行运行shell脚本
停止py程序
ps axu|grep count.py|grep –v grep|awk ‘{print $2}’|xargs kill -9
写入pystop.sh
sh pystop.sh
原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用
nohup.out 注意大小
原文地址:https://www.cnblogs.com/strugger-0316/p/13945060.html