dynamicsoar's log

主に研究関係のメモ

現在走ってるjobの終了を待って次のジョブを投入したい→tailを使う

普通に考えると wait かな、って思うんだけど、けっこう前に走らせたジョブがあって、という場合、

[pid] is not a child of this shell

とか怒られてうまくいかない。いろいろググったところ、なんと tail を使えというお言葉が…:

bash - WAIT for "any process" to finish - Stack Overflow

どうやら --pid= というオプションがあったらしい…。そこで、

#!/bin/bash
PID=終わるのを待ってるジョブの番号
tail -f --pid=${PID} /dev/null
time nohup ./a.out > log.txt &(みたいな、次のジョブのコマンド)

という超短いスクリプトを書いて、wait_run.sh みたいな名前で保存して、

$ ./wait_run.sh &

とやったら、行けた模様。もちろんジョブ番号やコマンドを引数にすればもっといい…というかたぶんワンライナーで書けるんだとは思う。ただ、単にセミコロンでつなぐとバックグラウンドに回ってくれないかなんかで、うまくいかなかった。bashのことが何もわかっていない…orz けど動いたので、いいか…