shell的前台作业与后台作业

前台作业(Foreground Jobs)

  1. 交互性:前台作业是用户启动并需要直接交互的进程
    2. 直接交互:用户可以看到该进程的输出并直接从键盘输入到该进程
  2. 控制焦点:一个shell在任何时候都只能且只有一个前台作业
  3. 信号相应:前台作业可以接收如Ctrl+C(产生SIGINT信号)等终端生成的信号,从而停止该作业。

后台作业(Background Jobs)

  1. 非交互性:后台作业时shell背后运行的进程,它不需要直接与用户通过终端交互
    1. 它不会占用终端的输入(终端的输入不会给它),也不会占用终端的输出(除非期输出被特别重定向)。
      2. 因此也不会接收终端产生的信号,例如SIGINT信号
  2. 多任务处理:一个shell能同时运行多个后台作业,这些后台作业通常不会阻塞终端,用户可以直接在终端进行其他操作。

控制前台和后台作业

Shell提供了多种命令来管理前台和后台作业:

  • 启动后台作业:只要在命令末尾添加“ & ”符号,就饿可以使命令在后台运行(例如 sleep 60 &)。
  • 作业控制:使用 jobs 命令可以查看当前的后台作业状态;fg 命令可以将后台作业调回前台;bg 命令可以将停止的作业继续在后台运行。
  • 终止和信号:使用 kill 命令发送信号给特定作业。

为什么用ssh远程连接,然后用&运行后台作业,断开ssh后,运行的后台也会停止运行了?

因为当我们通过SSH连接到设备终端,并在终端运行的后台作业(启动进程去运行)时,这个进程通常会成为SSH会话的一部分;当我们断开SSH(结束会话)时,所有属于该会话的进程通常会接收到SIGHUP(挂断信号),从而终止进程。因此这里不管前台还是后台作业,都会随着会话关闭而终止进程。

那如何使得通过ssh远程连接并运行的后台作业 不会随着ssh断开而终止呢?

  • 我们可以在运行后台作业时,用nohup设置该作业忽略SIGHUP(挂断信号),这样它就不会因为ssh会话关闭而终止了。

    指令设置如下:
    nohup your-command &

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值