Linux服务器nohup运行Flask应用后捕获PID的方法
捕获Flask后台进程PID的可行方案
一、启动时直接捕获PID(推荐)
后台启动进程后,Shell的$!变量会自动保存最后一个后台进程的PID,这是最准确的方法,无需事后查找。
保存到Shell变量:
# 启动Flask应用并后台运行 nohup python /home/app/run_flask.py > /home/temp/run_flask.out 2> /home/temp/run_flask.err & # 将PID存入变量 FLASK_PID=$! # 可选:打印验证 echo "Flask应用已启动,PID: $FLASK_PID"后续终止进程时直接执行:
kill $FLASK_PID写入PID文件:
如果需要跨Shell或脚本复用PID,可以写入文件持久化:nohup python /home/app/run_flask.py > /home/temp/run_flask.out 2> /home/temp/run_flask.err & # 将PID写入文件 echo $! > /home/temp/flask_app.pid后续读取PID并终止进程:
kill $(cat /home/temp/flask_app.pid)
二、事后查找已运行进程的PID
如果进程已经启动,需要事后查找,注意排除grep自身的进程(你之前的命令错误捕获了grep的PID,示例中112265是grep进程,108708才是真正的Flask进程),以下是两种可靠方法:
方法1:改进ps+grep组合
通过grep -v grep排除grep自身的进程:
FLASK_PID=$(ps -ef | grep /home/app/run_flask.py | grep -v grep | tr -s ' ' | cut -d ' ' -f2)
执行echo $FLASK_PID即可验证输出的正确PID。
方法2:用pgrep简化命令
pgrep是专门用于查找进程PID的工具,-f参数匹配整个命令行,避免误匹配:
FLASK_PID=$(pgrep -f "/home/app/run_flask.py")
该命令直接返回目标进程的PID,无需额外处理,更简洁可靠。
内容的提问来源于stack exchange,提问作者Farid Arshad
相关产品推荐
相关产品推荐

