linux - Bash 中的进程池

标签 linux bash volatility yara

我正在尝试获取一个 for 循环,它只会根据规则列表执行线程化的波动性 yara 扫描模块。每个核心每个规则扫描一次。基本上,它应该获取当前正在运行的 vol.py 进程数并检查核心计数并最大化正在运行的进程。

但是,当我运行它时,它会为每个规则生成一个波动过程,而不仅仅是最大的 4 个(基于我的核心计数)。任何有关此处语法的帮助都会很棒。

目前我有这个:

count=$(ps aux | grep vol.py | wc -l)
cores=$(cat /proc/cpuinfo | grep processor | wc -l)
for x in $(cat $rules_path/rules.txt)
do
  if [ $count -lt $cores ]; then # we are under the limit
     echo $x
     vol.py -f /home/cuckoo/.cuckoo/storage/analyses/12/memory.dmp --profile=Win7SP1x64 yarascan --yara-file=$rules_path/allrules/$x --output=text --output-file=$out_dir/$x.log &>/home/$name/Desktop/error.txt & 
  else
     wait
  fi
done

最佳答案

您可以使用 GNU parallel 中的 sem 轻松完成此操作:

for x in $(cat "$rules_path/rules.txt")
do
  sem -j +0 vol.py -f /home/cuckoo/.cuckoo/storage/analyses/12/memory.dmp \
      --profile=Win7SP1x64 yarascan --yara-file="$rules_path/allrules/$x" \
      --output=text --output-file="$out_dir/$x.log" \
         &> "/home/$name/Desktop/error.txt"
done

您不必计算内核数或管理进程。 sem 处理一切,并在每个内核上运行一个进程。

关于linux - Bash 中的进程池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45016529/

相关文章:

linux - 用变量替换 Bash 命令

linux - 如何跟踪后台运行的shell脚本?

cpu-registers - 如何理解 volatile 和非 volatile 寄存器?

Excel - 选择不同单元格时强制重新计算

linux - sed 只适用于一行

linux - 有没有办法以编程方式控制 Linux 上的硬盘驱动器事件灯?

bash - 你如何在后台执行多个 bash 函数但等待输出?

python - 在 python 中使用控制台命令

linux - 我如何在内核中使用性能计数器?

r - 解析 R : Quantmod application 中的引号