这可能不是一个全新的话题,但我遇到了一点奇怪的情况。
通过在后台启动脚本,我在一个循环中处理了大约1000个文件。我想根据每个进程返回的退出代码对文件执行一些操作。当我进入循环等待每个进程完成时,我发现一些进程已经完成了。我修改了脚本,使其仅在pgrep找到进程时才等待,并假定进程已成功完成。问题是-我必须知道每个进程的退出代码,以便对相应的文件执行操作。有什么想法吗?
pid_list=() for FILE in $SOME_FOLDER do (process with FILE as parameter) & done
for pid in "${pid_list[@]}" do if pgrep $pid; then #process could have just completed as we got here if wait $pid; then echo "process $pid successfully completed!" >> $logfile else echo "process $pid failed!" >> $logfile fnc_error_exit fi else echo "assumed that process $pid successfully completed but I DON'T KNOW THE EXIT CODE!" >> $logfile continue fi done
发布于 2016-07-08 10:21:59
我不能准确地解决你的问题。
既然我不知道你的确切情况,你可以尝试其他方法使用父脚本和子脚本吗?
例如,最上面的脚本如下所示:
for FILE in $HOME/*.txt
do
parent.sh $FILE &
done然后,parent.sh是这样的:
child.sh $1
RC=$?
case $RC in
0 ) echo Exit code 0 for $1 >> parent.log
;;
1 ) echo Exit code 1 for $1 >> parent.log
;;
* ) echo Other Exit code $RC for $1 >> parent.log
;;
esac子脚本如下所示:
grep -q hello $1然后,parent.sh将处理child.sh的每个退出代码
所有文件都将由parent.sh处理,而不会遗漏处理。
https://stackoverflow.com/questions/38085169
复制相似问题