我的两个例子是:
echo hi &
和:
(echo hi &)
第一个会给我进程 ID 作为返回结果(例如"[1] 5627"
),其中添加优先运算符会删除它。发生了什么导致这种情况?
另外,有没有办法添加优先级,但仍然让后台任务报告其进程 ID?
答案1
这是一个关于作业控制。请阅读相应部分man bash
。
shell 中的括号不仅仅是优先运算符。他们启动了一个新的(子)shell。
您通常在启用了作业控制的交互式 shell 中输入内容。将命令放在括号中将在没有作业控制的子 shell 中运行此命令。
尝试:
sleep 10&
jobs
(sleep 10&)
jobs
第一个睡眠由 列出jobs
,因为它是从启用作业控制的 shell 启动的。第二个不是,因为它是由子shell启动的。