如何让程序在 Linux 后台运行
Posted on Wed, 25 Dec 2024 13:55:32 +0800 by LiangMingJian
如何让程序在 Linux 后台运行
需求
在 Linux 运维时,有时候让一些命令或程序长时间挂载运行。这些命令或任务不能被远程终端关闭结束,也不能被 Ctrl+C 结束,此时就需要将程序放置在后台执行。
通过 nohup 和 & 后台执行
nohup ping 127.0.0.1 > run.log 2>&1 &
在上述命令中,nohup 表示忽略 SIGHUP 信号(挂断信号),允许程序在终端结束后运行;& 表示程序在后台运行,允许程序忽略 Ctrl+C 发送的 SIGINT 信号(中断信号)。
默认情况下,终端关闭时会向关联进程发送 SIGHUP 信号导致进程终止。
同时,Ctrl+C 在按下后向进程发送 SIGINT 信号,中断程序运行。
然后 > run.log 表示将标准输出重定向到 log 文件,2>&1 表示将错误输出(stderr)重定向到标准输出(stdout)中,通过 > run.log 2>&1 的使用,可以让命令的正确输出和错误输出都到一个文件中。
在成功启动程序后,命令行会输出进程 ID,在需要关闭后台进程时,可以通过该进程 ID 进行 kill 关闭。

kill 20481
kill -9 20481
# 参数 -9 用以强制关闭
特别的,如果忘记了该后台执行的进程,可以通过命令 ps aux 显示所有程序。如果还记得名称,则可以使用 grep 进行查找。
ps aux
ps aux | grep ping
扩展阅读:nohup 和 & 的区别
nohup
表示当前执行命令将忽略 SIGHUP 信号(挂断信号),此时即使关闭终端 Shell,也会因为命令对 SIGHUP 信号免疫而不会结束。
只使用 nohup 时,Ctrl+C 可以结束该进程。
&
表示当前执行命令将在后台运行,此时因为程序在后台进行,因此会免疫 SIGINT 信号(中断信号)。当用户使用 Ctrl+C 时,程序照样进行。
只使用 & 时,关闭终端可以结束该进程。
以上
在实际使用时,为让进程不受 Shell 关闭和 Ctrl+C 的影响,命令nohua 和 & 往往配对使用。