温馨提示×

nohup命令如何避免进程被系统终止

小樊
43
2025-07-23 04:09:44
栏目: 编程语言

nohup(no hang-up)命令用于在后台运行程序,使其在用户退出登录后仍然继续运行。默认情况下,nohup会忽略挂起(SIGHUP)信号,从而防止进程被系统终止。以下是一些使用nohup的常见方法和注意事项:

基本用法

nohup command & 
  • command 是你想要在后台运行的命令。
  • & 将命令放入后台运行。

输出重定向

通常,nohup会将命令的输出重定向到一个名为 nohup.out 的文件中,除非你指定了其他输出文件。

nohup command > output.log 2>&1 & 
  • > output.log 将标准输出重定向到 output.log 文件。
  • 2>&1 将标准错误输出重定向到标准输出,即 output.log 文件。

避免进程被系统终止的其他方法

  1. 使用 disown 命令: 如果你已经启动了一个进程,可以使用 disown 命令将其从当前 shell 的作业表中移除,从而防止它被挂起信号终止。

    nohup command & disown 
  2. 使用 screentmuxscreentmux 是终端复用工具,可以在一个终端会话中创建多个独立的终端窗口,并且即使断开连接,这些窗口中的进程也会继续运行。

    screen -S mysession command # 按 Ctrl+A 然后按 D 键分离会话 

    重新连接会话:

    screen -r mysession 
  3. 使用 systemd 服务: 对于需要长期运行的服务,可以创建一个 systemd 服务单元文件,使其作为系统服务运行。

    [Unit] Description=My Service [Service] ExecStart=/path/to/command Restart=always [Install] WantedBy=multi-user.target 

    将文件保存为 /etc/systemd/system/myservice.service,然后启用并启动服务:

    sudo systemctl enable myservice sudo systemctl start myservice 

通过这些方法,你可以确保进程在用户退出登录或系统重启后仍然继续运行。

0