python kill
nohup+Django后台运行,以及详解ps+grep+awk+xargs命令杀死所有进程
前言
简单记录下linux命令:nohup、ps、awk、xargs、lsof、netstat,供后续查询使用。
nohup
nohup是linux用于后台执行程序的启动命令之一。是英文no hang up的缩写,即不挂断地运行命令,所以单独用nuhup即可以在退出账户/关闭终端之后继续运行相应的进程。但要注意,这并不是后台运行,如果要实现后台运行,那就得在程序后加上&。
比如用nohup来启动django,配合manage.py就能在即使关掉终端的情况下后台运行django程序,又或者在运行完python程序,又要回到shell运行其他命令时,就是首选,命令如下:
nohup python manage.py runserver &
1
结果如下:
在这里插入图片描述
[1]表示进程,然后appending output to nohup.out就是表示输出的内容添加到了nohup.out里面了,如果要看输出的日志,就可以像看日志一样用tail -f nohup.out来查看输出的所有信息。好处是nohup可以详细地将所有输出都记录到文件里,并且不用占据shell,非常方便。
ps+awk+xargs
ps在linux命令的使用中频率算是非常高的了,用于查看当前系统中进程的快照,搭配一些选项可以用于查看进程id以及杀死对应的进程。
ps命令支持3种风格:
UNIX 风格,选项组合前必须有“-”连字符
BSD 风格,选项组合前不能有“-”连字符
GNU 风格,选项前有两个“-”连字符
现举例最常用的ps命令以及其所对应的含义:
直接运行ps
在这里插入图片描述
结果显示四列信息:PID表示命令进程号,TTY表示命令所运行的位置,TIME表示cpu处理该命令时间,CMD表示该进程所运行的命令。
显示所有当前进程
那一般ps最常搭配的是ps -aux来显示所有进程,正常还会配合上管道+grep来搜索对应的进程,这边简单介绍各选项:
a:显示所有程序
u:以用户为主的格式来显示
x:显示所有程序,不以终端机来区分
结果如下(只截取了部分结果):
在这里插入图片描述
简单介绍所有列的含义:
USER 用户名
%CPU 进程占用的CPU百分比
%MEM 占用内存的百分比
VSZ 该进程使用的虚拟內存量(KB)
RSS 该进程占用的固定內存量(KB)(驻留中页的数量)
STAT 进程的状态
START 该进程被触发启动时间
TIME 该进程实际使用CPU运行的时间
CMDMAND 命令行命令
1
2
3
4
5
6
7
8
9
也可以通过ps -u username来单独根据用户来查询其所对应的进程,比如可以ps -u michael查询michael使用的所有进程。
那ps -aux搭配选项可以查询到很多想看的信息,比如:
ps -aux|grep redis --> 查看redis所对应的进程号的信息
ps -aux --sort -pcpu --> 根据 CPU 使用来升序排序
ps -aux --sort -pmem --> 根据内存使用来生序排序
ps -aux --sort -pcpu,+pmem | head -n 10 -->显示前十个cpu\内存使用率最高的
除了用ps -aux显示所有进程,还有ps -ef也可以显示所有进程,而且使用频率也很高,-e表示所有进程(等同于-a),f表示全格式显示,那结果如下(截取部分):
在这里插入图片描述
ps -ef和ps -aux差别不大,这两者追溯到Unix系统中的两种风格,System V风格和BSD 风格,ps aux最初用到Unix Style中,而ps -ef被用在System V Style中,两者输出略有不同。现在的大部分Linux系统都是可以同时使用这两种方式的。
那在用ps -ef|grep 查找进程很方便,但最后一行一定会是grep,有时不注意看还以为有进程存在,实际上只是grep自己的命令,这时可以通过grep -v grep来排除自身,-v是grep的选项,表示不搜索后面跟着的命令。
ps -ef|grep redis| grep -v grep #表示搜索redis的进程信息
1
除此之外,再搭配awk+xargs可以实现查找所有该进程的id以及杀死所有的该进程id:
ps -ef|grep runserver| grep -v grep |awk '{print $2}'|xargs kill -9
1
awk表示获取命令行的数据,搭配print可以打印出对应的命令行数据,比如上述的print $2表示获取显示出的所有条数的第二列信息,那我们知道ps -ef显示的第二列信息就是进程id号,所以就是获取grep runserver后所有进程的进程id号,然后使用xargs执行kill命令来杀死所有进程id,xargs命令的作用就是为其他linux命令提供参数。
上述命令的意义就是查询所有包含runserver的linux进程,并杀死所有该进程,一般用于python manage.py runserver来启动django程序时,就可以用该命令杀死所有的进程。
linux其他获取进程和端口的命令:lsof和netstat
有时我们在运行python网站时会显示端口被占用,想查看端口的使用情况的话,就可以用lsof -i:port来显示:
lsof -i:6000 #显示6000端口号的进程信息
1
结果如下,6000端口号是我配置的redis:
在这里插入图片描述
也可以通过netstat [选项]来查看TCP/IP网络,常见的选项有如下:
-a: 列出所有端口
-l:只显示监听端口
-s:显示端口的统计信息
-t:显示tcp传输协议的连接情况
-u:显示udp传输协议的连接情况
-n:直接使用ip地址,而不通过域名服务器
-p:显示正在使用Socket的程序识别码和程序名称
所以当我们想了解一个端口的使用进程,也可以通过netstat -anp|grep port来实现:
netstat -anp|grep 6000
1
结果如下:
在这里插入图片描述
这里再介绍netstat常用用法:
列出所有端口:netstat -a
列出所有TCP端口:netstat -at
列出所有UDP端口:netstat -au
列出所有处于监听状态的 Sockets:netstat -l
显示每个协议的统计信息:netstat -s
显示 PID 和进程名称:netstat -p
显示核心路由信息:netstat -r
总结
此次就介绍到这里,还有很多需要学习的,一起努力~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端