MST
星途 面试题库

面试题:Bash多进程并发中的资源管理

假设在Bash脚本中有多个并发进程同时读写一个文件,可能会出现数据竞争问题。请设计一个方案,在Bash中利用信号量机制或者其他方式来解决该文件读写的数据竞争问题,并写出实现该方案的Bash脚本代码。
43.1万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试

可以利用 flock 命令来实现文件锁,从而解决数据竞争问题。以下是示例脚本:

#!/bin/bash

# 定义要操作的文件
FILE="shared_file.txt"

# 获取文件锁
flock -x 200

# 这里开始对文件进行读写操作
echo "进程 $$ 正在写入文件..."
echo "This is some data from process $$" >> "$FILE"
echo "进程 $$ 完成写入操作"

# 释放文件锁
exec 200>&-

echo "进程 $$ 已释放文件锁"

解释:

  1. flock -x 200flock 命令用于获取文件锁,-x 表示排他锁(独占锁),200 是一个自定义的文件描述符,用于后续锁定文件。
  2. exec 200>&-:释放由文件描述符 200 持有的锁。

在这个脚本中,当多个进程尝试执行时,只有获取到锁的进程才能对文件进行读写操作,其他进程需要等待锁释放后才能继续。这样就避免了数据竞争问题。