Bash 追加到文件,在执行期间删除。这个问题可以解决吗?

Bash 追加到文件,在执行期间删除。这个问题可以解决吗?

我刚刚意识到发生了一些相当愚蠢的事情(我这边)。我目前正在多台机器上运行多个程序,同时附加它们的输出。

例如,machine01 正在运行“./calc 1 >> calc_one.txt”,machine02 正在运行“./calc 2 >> calc_two.txt”等。

这些计算运行了很长时间,我刚刚发现发生了一些烦人的事情。我正在使用 git,并且在许多机器上运行这些程序。我编写了程序的新模式并调用在 machine03 上运行它。

因为我使用的是git,所以我认为是保存删除目录中的.txt文件。

我刚刚意识到机器分享一个目录。所以我删除了“calc_one.txt”和“calc_two.txt”,输出被附加到其中。

现在,这些程序实际上只在以下位置打印输出:结尾。程序中有大量线程(OMP),这些线程生成结果(C++向量),这些结果在所有线程完成后打印。

因此,流仍然会来。但使用 BASH 和“睡眠”进行的实验表明,替换 .txt 文件不会使其追加到新文件中。我能做什么或者我需要从头开始这些模拟吗?

衷心感谢您的帮助,戴莫妮

PS:系统是fedora。我没有管理权限。

答案1

 1.获取进程PID。例如:

pgrep calc

 2.查找已删除的文件。例如:

find /proc/12345/fd -ls | grep '(deleted)'
# or (no pid)
lsof | grep calc_one.txt
# ...
lsof -p 12345

 3. a) 复制文件(来自之前的结果,此处3)。快照:

cp /proc/12345/fd/3 mycopy1.txt

 3.b) 新的附加文件:

tail -c +0 -f /proc/12345/fd/3 > mycopy2.txt

在哪里:

-c +K,输出从第K个字节开始的字节。因为我们想要整个文件,所以我们说 +0
-f   ,跟随。随着文件的增长输出附加数据。

相关内容