![优先级对后台任务执行有什么影响?](https://linux22.com/image/71419/%E4%BC%98%E5%85%88%E7%BA%A7%E5%AF%B9%E5%90%8E%E5%8F%B0%E4%BB%BB%E5%8A%A1%E6%89%A7%E8%A1%8C%E6%9C%89%E4%BB%80%E4%B9%88%E5%BD%B1%E5%93%8D%EF%BC%9F.png)
我的两个例子是:
echo hi &
和:
(echo hi &)
第一个会给我进程 ID 作为返回结果(例如"[1] 5627"
),其中添加优先运算符会删除它。发生了什么导致这种情况?
另外,有没有办法添加优先级,但仍然让后台任务报告其进程 ID?
答案1
这是一个关于作业控制。请阅读相应部分man bash
。
shell 中的括号不仅仅是优先运算符。他们启动了一个新的(子)shell。
您通常在启用了作业控制的交互式 shell 中输入内容。将命令放在括号中将在没有作业控制的子 shell 中运行此命令。
尝试:
sleep 10&
jobs
(sleep 10&)
jobs
第一个睡眠由 列出jobs
,因为它是从启用作业控制的 shell 启动的。第二个不是,因为它是由子shell启动的。