使用&、nohup或screen/tmux可让Linux进程在后台运行,nohup能避免终端关闭时进程终止,输出可重定向至日志文件;通过ps aux结合grep查看进程,kill命令结束指定PID的进程,jobs仅管理当前会话后台任务。

让Linux进程在后台运行,简单来说,就是让它脱离你的当前终端,这样即使你关闭终端窗口,进程也能继续跑着。
解决方案:
最常用的方法是在启动命令后加上
&符号。例如,你想让一个名为
my_script.sh的脚本在后台运行,可以这样:
./my_script.sh &
这会立即返回一个进程ID (PID),你可以用这个PID来监控或结束进程。
但这样有一个问题,如果你的脚本需要读取标准输入,或者向标准输出/标准错误输出打印信息,而终端已经关闭,可能会导致一些问题。为了更稳妥,可以使用
nohup命令。
nohup ./my_script.sh > my_script.log 2>&1 &
nohup会忽略 HUP (hang up) 信号,也就是终端关闭时发送的信号。
> my_script.log将标准输出重定向到
my_script.log文件,
2>&1将标准错误输出也重定向到标准输出(也就是
my_script.log)。 这样,即使终端关闭,进程的输出也会被记录下来,方便你查看。
还有一个选择是使用
screen或
tmux。 这两个工具可以创建多个虚拟终端会话,你可以在这些会话中运行进程,然后“detach” 会话,让它们在后台运行。 稍后你可以重新“attach” 会话,查看进程的输出。
screen -S my_session ./my_script.sh # 按 Ctrl+a 然后按 d detach 会话 screen -r my_session # 重新 attach 会话
tmux的用法类似,但命令略有不同。
如何查看正在后台运行的进程?
使用
ps aux命令可以查看所有正在运行的进程。
grep命令可以过滤出你关心的进程。
ps aux | grep my_script.sh
输出会显示包含
my_script.sh的进程信息,包括PID、用户、CPU占用率、内存占用率等等。
如果只想查看当前用户运行的进程,可以使用
ps -u your_username。
如何结束后台运行的进程?
知道了PID,就可以用
kill命令结束进程。
kill PID
例如,如果
my_script.sh的PID是12345,那么可以执行
kill 12345。
如果进程没有响应
kill命令,可以使用
kill -9 PID强制结束进程。 但是,强制结束进程可能会导致数据丢失或其他问题,所以尽量避免使用。
另外,如果进程是用
nohup启动的,并且标准输出/标准错误输出被重定向到文件,那么结束进程后,可能需要手动删除这些文件。
jobs命令也可以查看当前shell会话启动的后台进程,并使用
fg %job_number将其调回前台。 但是,
jobs命令只能管理当前shell会话启动的进程,对于使用
nohup或
screen/tmux启动的进程无效。










