You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下删除nohup.out后,如何让进程继续输出?

解决nohup删除输出文件后重新写入的问题

可以在不终止进程的前提下恢复输出写入,核心是重新关联进程的标准输出/错误到新的文件,具体步骤:

  • 找到目标进程的PID
    因为你运行的是jar包,对应的是Java进程,执行以下命令查找PID:

    ps aux | grep java
    

    从输出中找到对应的数据迁移进程的PID(比如12345)。

  • 备份未写入磁盘的输出内容(可选但推荐)
    删除nohup.out后,进程仍在往已删除的文件句柄写入,你可以先导出这部分缓存内容:

    cat /proc/12345/fd/1 > nohup.out.bak
    cat /proc/12345/fd/2 >> nohup.out.bak
    
  • 创建新的nohup.out文件

    touch nohup.out
    
  • 重新关联进程的输出到新文件
    使用gdb工具修改进程的文件描述符(无需终止进程):

    # 重定向标准输出(stdout)到新nohup.out
    gdb -p 12345 -batch -ex 'call open("nohup.out", 0x41, 0644)' -ex 'call dup2($1, 1)' -ex 'call close($1)'
    # 重定向标准错误(stderr)到新nohup.out
    gdb -p 12345 -batch -ex 'call open("nohup.out", 0x41, 0644)' -ex 'call dup2($1, 2)' -ex 'call close($1)'
    

    解释:0x41代表以写入+创建的方式打开文件,0644是文件权限;dup2会将新打开的文件句柄替换原来的stdout(1)和stderr(2)。

完成后,进程的输出就会重新写入新的nohup.out文件,全程不需要停止数据迁移进程或重新执行nohup命令。

内容的提问来源于stack exchange,提问作者Arnold Mr ARNOLD Charyyev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:25:26