LSF是一個批處理調度系統,因此你與它交互客戶端是異步的:
- 您使用BSUB提交作業調度,在BSUB命令立即
- 列表項 回報後臺,系統時間表和 調度作業
要查找實際工作負載的狀態,我可以給你幾個選項。
選項1個
力bsub
同步採取行動。考慮到代碼示例的當前狀態,這可能是最簡單的選項:基本上,您只需要bsub
即-K
選項。這將導致該命令基本上不會返回,直到作業已排隊,布控,並完成,然後在命令將返回,就像你想要的工作的退出代碼:
std::string cmdLine = "bsub -K test.sh"; // Use -K option
File *fp = popen(cmdLine.c_str());
int retcode = pclose(fp); // this will now return the exit code of test.sh
選項2
有些網站不喜歡讓用戶出於各種原因使用-K
選項。如果您遇到這種情況,那麼您需要使用bjobs
命令向系統查詢您的工作狀態。
基本上,在bsub
返回後,您的代碼將重複調用bjobs
命令並解析輸出以確定作業的退出狀態。例如:
$ bjobs -o 'stat exit_code' 6308
STAT EXIT_CODE
DONE -
讓我對退出狀態和退出代碼,作業ID 6308(通過提交作業時解析的bsub
輸出獲得的作業ID)的列:
- 如果狀態欄是
DONE
如果狀態欄是EXIT
那麼你的工作異常結束,你可以從EXIT_CODE列
- 如果狀態colu退出代碼你的工作順利完成
- mn是
RUN
或PEND
那麼你的工作正在運行或等待分派,你的代碼應該在sleep()
一會兒,然後再試着撥打bjobs
。
注意,上面的例子bjobs
輸出使用-o
選項來定製容易解析的輸出。這是一個相對較新的功能,如果您使用的是舊版本的LSF,則必須在沒有該功能的情況下才能做到 - 可行,但需要更多參與。