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

Posted

技术标签:

【中文标题】获取前一段时间完成的后台进程的退出代码【英文标题】:get exit code of a background process that completed a while ago 【发布时间】:2016-06-28 19:53:55 【问题描述】:

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

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

我不能完全解决你的问题。

既然不知道你的具体情况,那你能不能换个方法用父子脚本试试?

例如,最上面的脚本是这样的:

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

【讨论】:

以上是关于获取前一段时间完成的后台进程的退出代码的主要内容,如果未能解决你的问题,请参考以下文章

linux获取后台进程的控制台数据

脚本退出后执行后台进程

如何获取后台进程的进程ID?

HapiJS 启动更长的后台进程

为啥我退出 shell 时 unix 后台进程有时会死机?

让linux进程后台运行会话断开不退出