【问题标题】:What happens to the previous foreground job, when command fg a new job?当命令 fg 一个新工作时,以前的前台工作会发生什么?
【发布时间】:2021-11-27 11:16:08
【问题描述】:

一个 shell 一次只能有一个前台作业。使用 fg 将作业放置到前台时,之前运行的前台作业会发生什么情况? shell 会向它发送 SIGTSTP 并更改作业状态吗?还是直接被bg放到后台?

【问题讨论】:

  • 要使用shell发出bg shell,需要停止前台进程,例如通过^Z。这会将 SIGTSTP 发送到前台进程,因此它在提示输入时不会干扰 shell。有关当您 bg 以前的前台进程时会发生什么的更多信息,请参阅 details on foreground process groups in this answer

标签: linux shell jobs


【解决方案1】:

要在同一个 shell 中的前台启动作业,首先需要使用 CTRL+Zbg 将前一个作业发送到后台。如果省略bg,之前用CTRL+Z发回的前台作业仍然会被停止(理解为:暂停,没有得到任何处理时间)。

换句话说:当另一个作业已经在运行时,我不知道如何将另一个前台作业放入外壳中在那个同一个shell的前台,因为正在运行的前台作业使用标准输入。

例子:

$ sleep 4223
^Z
[1]+  Stopped                 sleep 4223
$ bg
[1]+ sleep 4223 &
$ sleep 1234
^Z
[2]+  Stopped                 sleep 1234
$ jobs 
[1]-  Running                 sleep 4223 &
[2]+  Stopped                 sleep 1234
$ fg 1
sleep 4223
fg 2  # this command has no effect, stdin is used by job 1
^Z
[1]+  Stopped                 sleep 4223
$ jobs
[1]+  Stopped                 sleep 4223
[2]-  Stopped                 sleep 1234
$ bg
[1]+ sleep 4223 &

【讨论】:

  • 如果我继续运行并按 ctrl-z,但我不使用 bg 怎么办?我想这会导致很多很多进程停止。这似乎是一个问题。
  • 它只会停止(暂停)您在后台使用CTRL+Z 发送的进程。
猜你喜欢
  • 1970-01-01
  • 2014-06-15
  • 1970-01-01
  • 2021-02-17
  • 2019-05-06
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多