温馨提示×

如何使用nohup避免进程被杀

小樊
45
2025-12-07 23:58:22
栏目: 编程语言

nohup(no hang-up的缩写)是一个在Unix和Linux系统中用于在后台运行命令的实用程序,即使用户退出登录或关闭终端,它也能保持进程运行。以下是如何使用nohup来避免进程被杀的步骤:

使用方法

  1. 基本语法

    nohup command [arguments] &
    
    • command 是你想要运行的命令。
    • [arguments] 是传递给命令的参数(可选)。
    • & 将命令放入后台运行。
  2. 示例: 假设你想运行一个名为 myapp 的应用程序,并希望它在后台持续运行,即使你关闭终端:

    nohup ./myapp &
    
  3. 输出重定向: 默认情况下,nohup 会将标准输出和标准错误输出重定向到当前目录下的 nohup.out 文件。如果你想指定不同的输出文件,可以使用重定向操作符:

    nohup ./myapp > myapp_output.log 2>&1 &
    

    这里,> 将标准输出重定向到 myapp_output.log2>&1 将标准错误输出重定向到标准输出,从而两者都写入同一个文件。

避免进程被杀的额外措施

  1. 使用 disown: 如果你已经启动了一个进程但没有使用 nohup,可以使用 disown 命令将其从当前shell的作业表中移除,防止它被终端关闭时终止:

    ./myapp &
    disown
    
  2. 使用 screentmux: 这些终端复用工具允许你在后台运行会话,并在需要时重新连接到它们。即使终端关闭,会话也会继续运行。

    screen -S mysession
    ./myapp
    # 按 Ctrl+A 然后 D 键来分离会话
    
  3. 使用 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
    

通过这些方法,你可以确保进程在各种情况下都能持续运行,避免被意外终止。

0