![手动将作业号分配给后台进程](https://linux22.com/image/124754/%E6%89%8B%E5%8A%A8%E5%B0%86%E4%BD%9C%E4%B8%9A%E5%8F%B7%E5%88%86%E9%85%8D%E7%BB%99%E5%90%8E%E5%8F%B0%E8%BF%9B%E7%A8%8B.png)
假设我将两项作业发送到后台。
$ sleep 77 &
$ sleep 99 &
然后我检查我的工作
$ jobs
> [1] - running sleep 77
> [2] + running sleep 99
我可以控制分配给这些职位的职位编号吗?我不确定我在这里使用的术语是否正确,我谈论的是之前示例中表示为[1]
和的数字。[2]
用例如下:我需要一项时不时更新我的凭据的工作,但大多数时候它都处于休眠状态。我写了一个函数,如果调用,它会自动发送到后台。我故意这样做,因为我想控制这个过程,即我明确希望将其作为一项工作。
当我调用该函数并且没有其他作业时,它会获取作业编号[2]
。 (我假设[1]
是调用该函数的子进程。)这很令人困惑,因为当我稍后发送job1
到后台时,它获取了 job number [1]
,但job2
获取了 job number [3]
。我希望如果我可以手动为我的睡眠函数分配一个大数字,例如类似[99]
.这可能吗?要么在bash
,要么zsh
?
答案1
不可以,您不能指定分配给后台进程的作业编号。
但是,您可以使用 - 获取最近后台进程的 PID $!
,这要有用得多。
例如
$ sleep 77 &
[5] 21959
$ job1=$!
$ sleep 99 &
[6] 21960
$ job2=$!
$ echo job1=$job1 job2=$job2
job1=21959 job2=21960
然后,稍后(但在第一个作业完成之前):
$ kill "$job1"
[1]- Terminated sleep 77
查看man bash
并搜索JOB CONTROL
有关后台工作的更多详细信息。
(注意:作业控制在所有 bourne 风格的 shell 中几乎都是相同的 - 但bash
到目前为止,有关于它的最好的手册页文档)