脚本中多线程(?)/多处理的语法

时间:2016-03-21 20:32:08

标签: multithreading bash fork

我正在运行一些非常冗长的模拟(大约几天,并且模拟器本身用于多线程/处理的唯一功能是使用PBS服务器并且有许多单独的节点可以将其放置出来)。

我目前有一个运行32个核心的虚拟机,在Ubuntu上运行约120GB RAM。

每个模拟目前在1个核心上运行,但我有几个文件要同时运行以节省时间(例如几天而不是几个月!) - 即我想在我的VM中运行模拟每个32个左右的核心。

到目前为止,我认为我的脚本没有正确生成多个分叉进程,因为top的输出没有为每个进程显示进程。

我到底哪里错了?

(另外在相关的说明中,对于脚本中的分叉进程(&),是否有必要指定nohup(在模拟命令本身或整个脚本中都有) - 我怀疑我是真的在这里愚蠢,应该真的在管道STDOUT,而只是没有.sh文件吗?

脚本:

#!/bin/bash

#####

pkgdir=~/Applications/itasser/
libdir=$pkgdir/itlib

for folder in `ls $1`;
    do
    datadir=`find ~/ -type d -name ${folder}`
    t_start=$(date +%s.%N)
    nohup perl ~/Applications/itasser/I-TASSERmod/runI-TASSER.pl -pkgdir $pkgdir -libdir $libdir -seqname $folder -datadir $datadir -java_home /usr/ &
    wait
    t_stop=$(date +%s.%N)
    dt=$(echo "$t_stop - $t_start" | bc)
    echo "itasser simulation for" $folder "took" $dt
done

$1是我传递给脚本的文件夹(例如~/testfiles/)。

我还怀疑我在这里为perl脚本计时的努力只有在顺序运行每个文件时才有效,并且不能正确计算每个理想分叉进程的时间 - 但这是一个单独的问题。

0 个答案:

没有答案