在服务器上,为了退出终端,程序依然能够运行,需要设置程序在后台运行。
有一种常用的方式:nohup
nohup 命令模板
nohup ./xxx.sh > xxx.log 1>&2 &
后台不挂起执行 xxx.sh。标准输出、错误输出,输出到 xxx.log 文件
此种情况,程序会再后台执行,退出用户或关闭客户终端,不影响程序运行。如想关闭程序,可通过 kill 命令关闭。
nohup ./xxx.sh > /dev/null 1>&2 &
后台不挂起执行 xxx.sh。标准输出、错误输出,均不输出
如果是 python 程序则可以这么写:
nohup python -u test.py > test.log 2>&1 &
含义解释
nohup 不挂起的意思
python test.py python 运行 test.py 文件 (注意:如果是 python3 环境则写 python3)
-u 代表程序不启用缓存,也就是把输出直接放到 log 中,没这个参数的话,log 文件的生成会有延迟
test.log 将输出日志保存到这个 log 中
2>1 2 与 > 结合代表错误重定向,而 1 则代表错误重定向到一个文件 1,而不代表标准输出;
2>&1 换成 2>&1,& 与 1 结合就代表标准输出了,就变成错误重定向到标准输出.
& 最后一个 & ,代表该命令在后台执行
可以通过 jobs 命令查看 nohub 命令下运行的所有后台进程
也可以通过 ps 命令查看
比如查看后台 python 进程:
ps -aux | grep python3
Kill 命令
kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]
参数说明:
-l <信息编号> 若不加 < 信息编号 > 选项,则 -l 参数会列出全部的信息名称。
-s <信息名称或编号> 指定要送出的信息。
[程序] [程序] 可以是程序的 PID 或是 PGID,也可以是工作编号。
使用 kill -l 命令列出所有可用信号。
最常用的信号是:
1 (HUP):重新加载进程。
9 (KILL):杀死一个进程。
15 (TERM):正常停止一个进程。
例如:
kill -9 test.sh
强制关闭 test.sh 这个进程
参考文章
https://blog.csdn.net/xiongzaiabc/article/details/86637773
https://www.jianshu.com/p/cb25cca2f8da