手动将作业号分配给后台进程

手动将作业号分配给后台进程

假设我将两项作业发送到后台。

$ 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到目前为止,有关于它的最好的手册页文档)

相关内容