面试题答案
一键面试实现思路
- 使用
mkfifo
创建一个命名管道,这是一种特殊的文件类型,用于进程间通信。 script1.sh
将数据写入命名管道,script2.sh
从命名管道读取数据进行处理。- 为防止
script1.sh
因script2.sh
处理速度慢而积压过多数据,可以在script1.sh
中控制每次写入的数据量,或者使用pv
工具来限制写入速度。
代码示例
- 创建命名管道 在终端中执行以下命令创建命名管道:
mkfifo data_pipe
- script1.sh
#!/bin/bash
# 每次写入1KB数据
while true; do
echo "大量数据产生中..." | head -c 1024 > data_pipe
done
或者使用pv
工具限制写入速度(假设每秒写入1KB):
#!/bin/bash
while true; do
echo "大量数据产生中..." | pv -L 1k > data_pipe
done
- script2.sh
#!/bin/bash
while true; do
data=$(cat data_pipe)
# 这里进行数据处理
echo "处理数据: $data"
done
- 运行脚本
在不同的终端窗口分别运行
script1.sh
和script2.sh
。运行完后,记得删除命名管道:
rm data_pipe