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

Jos*_*uaD 3 shell bash zsh jobs background-process

我想在我的 PS1 中添加一个指示器,显示是否有进程被 ctrl+z 挂起。为此,我需要一个能够检查这种情况的函数。我什至不确定从哪里开始考虑这个问题。谷歌让我失望了。有任何想法吗?

Gil*_*il' 6

“使用 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
Run Code Online (Sandbox Code Playgroud)

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

echo "There are $(jobs -s | wc -l) suspended jobs"
Run Code Online (Sandbox Code Playgroud)

  • @JoshuaD 猜测,我会说我的克星。(我在这个网站上有一个克星:-() 别担心。 (3认同)