MST

星途 面试题库

面试题:Bash中xargs命令在多进程及性能优化场景下的应用

你有一个巨大的文本文件 `large_file.txt`,每行是一个任务ID。现在需要对每个任务ID执行一个耗时的 `process_task.sh` 脚本(假设此脚本接收任务ID作为参数处理任务)。为了提高效率,你需要使用xargs命令结合多进程的方式并行处理这些任务ID,同时要考虑系统资源的合理利用,避免因进程过多导致系统资源耗尽。请详细阐述实现思路并编写完整的Bash脚本。
29.8万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 确定合适的并行进程数:可以通过nproc命令获取系统的CPU核心数,以此为基础设置并行进程数,例如设为CPU核心数的一半,以避免系统资源耗尽。
  2. 使用xargs并行执行脚本xargs命令可以从标准输入读取数据,并将其作为参数传递给指定的命令。结合-P参数可以设置并行执行的进程数。

Bash脚本

#!/bin/bash

# 获取CPU核心数的一半作为并行进程数
parallel_num=$(( $(nproc) / 2 ))

# 使用xargs并行处理任务ID
cat large_file.txt | xargs -P $parallel_num -I {} bash -c './process_task.sh {}'

在上述脚本中:

  1. 首先通过nproc获取CPU核心数,并计算出并行进程数parallel_num
  2. 然后使用cat命令读取large_file.txt文件内容,并通过管道传递给xargs
  3. xargs-P参数设置并行进程数为parallel_num-I {}指定替换字符串,将从文件中读取的每一行(任务ID)替换{},传递给process_task.sh脚本执行。