nohup(no hang-up的缩写)是一个在Unix和Linux系统中用于在后台运行命令的实用程序,即使用户退出登录或关闭终端,它也能保持进程运行。以下是如何使用nohup来避免进程被杀的步骤:
基本语法:
nohup command [arguments] &
command 是你想要运行的命令。[arguments] 是传递给命令的参数(可选)。& 将命令放入后台运行。示例:
假设你想运行一个名为 myapp 的应用程序,并希望它在后台持续运行,即使你关闭终端:
nohup ./myapp &
输出重定向:
默认情况下,nohup 会将标准输出和标准错误输出重定向到当前目录下的 nohup.out 文件。如果你想指定不同的输出文件,可以使用重定向操作符:
nohup ./myapp > myapp_output.log 2>&1 &
这里,> 将标准输出重定向到 myapp_output.log,2>&1 将标准错误输出重定向到标准输出,从而两者都写入同一个文件。
使用 disown:
如果你已经启动了一个进程但没有使用 nohup,可以使用 disown 命令将其从当前shell的作业表中移除,防止它被终端关闭时终止:
./myapp &
disown
使用 screen 或 tmux:
这些终端复用工具允许你在后台运行会话,并在需要时重新连接到它们。即使终端关闭,会话也会继续运行。
screen -S mysession
./myapp
# 按 Ctrl+A 然后 D 键来分离会话
使用 systemd 服务:
对于需要长期运行的服务,可以创建一个 systemd 服务单元文件,这样系统启动时会自动运行该服务,并且不受用户登录状态的影响。
[Unit]
Description=My Application Service
[Service]
ExecStart=/path/to/myapp
Restart=always
[Install]
WantedBy=multi-user.target
然后启用并启动服务:
sudo systemctl enable myapp.service
sudo systemctl start myapp.service
通过这些方法,你可以确保进程在各种情况下都能持续运行,避免被意外终止。