获取前一段时间完成的后台进程的退出代码

时间:2016-06-28 19:53:55

标签: process background ksh exit-code

这可能不是一个全新的话题,但我遇到了一些奇怪的情况。

我通过在后台启动脚本来循环处理大约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

1 个答案:

答案 0 :(得分:0)

我无法准确解决您的问题。

由于我不知道你的确切情况,你还可以尝试使用父和子脚本的其他方法吗?

例如,最顶层的脚本是这样的:

  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处理,不会丢失处理。