shell 函数检查是否有一个挂起的进程是该 shell 的子进程?

shell 函数检查是否有一个挂起的进程是该 shell 的子进程?

我想在我的 PS1 上添加一个指示器,显示是否有通过 ctrl+z 暂停的进程。为此,我需要一个能够检查这种情况的函数。我什至不知道从哪里开始思考这个问题。谷歌让我失望了。有任何想法吗?

答案1

“使用 Ctrl+Z 挂起的进程”实际上是“该 shell 的子进程的挂起进程”的子集,并且更容易跟踪:这意味着有一个挂起的后台作业。

在 zsh 中,您可以检查jobstates大批

if ((${(M)#jobstates:#suspended:*} == 0)); then
  echo There are no suspended jobs
else
  echo There are ${(M)#jobstates:#suspended:*} suspended jobs
fi

在 bash 或 zsh 中,jobs -s仅列出挂起的作业。

echo "There are $(jobs -s | wc -l) suspended jobs"

相关内容