在 shell 中批量启动多个计算
launch several computation in batch in a shell
我有 16 个计算要做,我想批量启动它以便同时使用我机器的 16 个核心。
我想做一个这样的 shell 脚本:
#!/bin/ksh
for i in `seq 16`
do
cd directory$i
<batch command>
done
可能吗?
你 可以。 你只需要确保它们 运行 作为后台任务,例如:
#!/bin/ksh
for i in `seq 16`
do
cd directory$i
<batch command> &
done
否则,它只会按顺序 运行 作业。您可能还想确保您也等待它们全部完成,方法是使用 wait
:
#!/bin/ksh
for i in `seq 16` ; do
cd directory$i
<batch command> &
done
wait # May depends on shell, bash/ksh waits for all
无需反引号(外部命令)
#!/bin/ksh
for d in dir{1..16}; do
echo $d &
done
wait
echo done
顺便说一句 schellcheck.net 会说:
Use $(..) instead of legacy `..`
我有 16 个计算要做,我想批量启动它以便同时使用我机器的 16 个核心。 我想做一个这样的 shell 脚本:
#!/bin/ksh
for i in `seq 16`
do
cd directory$i
<batch command>
done
可能吗?
你 可以。 你只需要确保它们 运行 作为后台任务,例如:
#!/bin/ksh
for i in `seq 16`
do
cd directory$i
<batch command> &
done
否则,它只会按顺序 运行 作业。您可能还想确保您也等待它们全部完成,方法是使用 wait
:
#!/bin/ksh
for i in `seq 16` ; do
cd directory$i
<batch command> &
done
wait # May depends on shell, bash/ksh waits for all
无需反引号(外部命令)
#!/bin/ksh
for d in dir{1..16}; do
echo $d &
done
wait
echo done
顺便说一句 schellcheck.net 会说:
Use $(..) instead of legacy `..`