![shell 函数检查是否有一个挂起的进程是该 shell 的子进程?](https://linux22.com/image/79985/shell%20%E5%87%BD%E6%95%B0%E6%A3%80%E6%9F%A5%E6%98%AF%E5%90%A6%E6%9C%89%E4%B8%80%E4%B8%AA%E6%8C%82%E8%B5%B7%E7%9A%84%E8%BF%9B%E7%A8%8B%E6%98%AF%E8%AF%A5%20shell%20%E7%9A%84%E5%AD%90%E8%BF%9B%E7%A8%8B%EF%BC%9F.png)
我想在我的 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"