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
相关产品推荐
相关产品推荐

