我有一个不想重新启动的后台进程。它的输出正在被主动记录到一个文件中。
nohup mycommand 1> myoutputfile.log 2>&1 &
我想"归档"进程当前正在将其输出写入的文件,并使其开始写入相同文件名的空白文件我必须能够做到这一点,而不必终止流程并重新启动
我试着简单地将现有文件重命名(为myoutputfile_.log
),希望shell现在发现该文件已不存在,将使用原始文件名(myoutputfile.log
)创建一个新文件。但这并不起作用,因为shell保留了对文件位置的引用,并一直附加到它
我看了看。在执行ls
时,我看到流现在被标记为(deleted)
,但我很困惑下一步该怎么做。在gdb
命令中,除了进程ID之外,我还必须指定进程可执行文件吗?如果我没有具体说明或者我弄错了,会发生什么?一旦进入gdb
,如何强制流在已删除文件的相同位置(相同路径和文件名)重新创建文件?
我如何使用shell中的命令向它发出信号,为现有进程的输出重定向启动一个新文件?
附言:我不能试错,因为我做对了很重要。如果知道它是相关的,这是一个java
过程
我通过以下操作解决了这个问题:
cp myoutputfile.log myoutputfile_.log; echo > myoutputfile.log
这实质上是在将原始内容复制到新文件后重置日志文件。