BASH:将多个bash后台进程写入同一文件是否安全?

乔治·伯德尔

我正在编写一个bash脚本,该脚本启动多个都写入同一文件的多个后台脚本。我的脚本如下所示:

for (( COUNTER=0; ...)); do

    ./otherscript a b &

done
wait

和./otherscript看起来像这样:

echo $1 $2 >> file.txt

这样安全吗?这些脚本可能在后台运行数百个,它们将在Debian和Ubuntu系统上运行。

查尔斯·达菲

在模式下的POSIX兼容文件系统(ext4,XFS等)上O_APPEND(这可以>>为您提供),无论您有多少个进程,写操作总会移到最底端。此外,如果这些写入适合单个存储器页面,则没有风险将它们分成多个单独添加的组件。

因此,这是不安全的:

exec >>somefile   # redirects all future stdout to somefile in O_APPEND mode
printf %s 'Hello' # BUGGY: Writing less than a line, so you can get split at this point
echo ' World'

...这也是:

exec >somefile     # truncate file and make all future writes go to it, NOT in O_APPEND mode
echo "Hello World" # BUGGY: Not opened with O_APPEND, so our file pointer may not be
                   # ...at the end after other programs have been doing concurrent writes.

...但这安全:

exec >>somefile     # redirects all future stdout to somefile in O_APPEND mode
echo "Hello World"  # SAFE: Writing a complete line, less than 4kb, in O_APPEND mode.

需要注意的是,如果您的写入大于一页(通常为4kb),则它们可能会拆分为多个syscall,但请尽量简短,并确保每个记录都包含完整的记录,并且您是安全的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++多个进程写入同一文件-进程间互斥?

Python 3:如何从多个进程写入同一文件而不弄乱它?

当多个进程尝试写入同一文件时会发生什么?

bash“ command1 ||回声失败”写入同一文件

通过多个FileInputStream访问同一文件是否安全?

使用tee同时输出多个命令到同一文件是否安全?

多个RandomAccessFile对象可以将数据写入同一文件吗?

将多个不同记录的数组以Avro格式写入同一文件

抓多个蜘蛛将项目写入同一文件

读写同一文件bash / unix

如何使用keras的fit generator的多处理模式解决写入同一文件的多个进程?

两个进程打开同一文件进行写入

我是否需要使用BufferedWriter和FileWriter在将数据写入同一文件时实现同步?

使用dispatch_write将NSData写入ARC下的后台唯一文件

多个用户使用PHP一次写入同一文件

多个Java进程可以同时读取同一文件吗?

多个进程使用>重定向到同一文件

使用BufferWriter从多个类写入同一文件

读写两个进程的同一文件是否需要lockfile

读取和写入同一文件fstream

foreach%dopar%写入同一文件

Python多处理-将结果写入同一文件

如何使用FFMPEG和C将音频和视频写入同一文件?

同一文件的多个文件句柄

重复创建指向同一文件bash的文件描述符

反应同一文件的多个导入

从同一文件中绘制多个系列

同一文件的多个副本

同一文件系统的多个挂载点