通常,我们在终端使用命令时,若在其后添加 &
会使程序在后台运行。那么这个所谓的在后台运行是什么意思呢?
这里其实要提到 Linux jobs 的概念,在 shell 中执行的每条命令都可以认为都是 job,这些 job 基本都是前台 job,若有的命令执行时间比较长,那么我们可以把它放到后台,使之成为后台 job,这样我们可以继续在终端中进行工作。&
的作用就是使进程成为后台 job。
除了 &
,对于已经在运行的前台 job,还可使用 Ctrl + Z 使之成为后台 job。
这也是为什么要使用 jobs -l
,查看后台 job。
如果从信号的角度理解,我们也可以认为 &
使程序免疫了 SIGINT
信号(Ctrl + C)。逃得了 SIGINT
不一定逃得了 SIGHUP
,终端会话关闭时,会发送 SIGHUP
信号来结束进程。因此经常会看到 &
和 nohup
连用,使进程同时免疫 SIGINT
和SIGHUP
信号,这样当终端退出后,该进程会交给1号进程接管,实现真正的后台运行
一个 jobs 的小例子
[test@test-server ~]$ watch -n 1 echo "hello world" &
[1] 13298
[test@test-server ~]$ jobs -l
[1]+ 13298 Stopped (tty output) watch -n 1 echo "hello world"
[test@test-server ~]$ bg %1
[1]+ watch -n 1 echo "hello world" &
[test@test-server ~]$ jobs -l
[1]+ 13298 Stopped (tty output) watch -n 1 echo "hello world"
[test@test-server ~]$ fg %1
没有太多技术含量,就是命令老忘,所以简单写了写。
本文链接:https://blog.xiaoyuyu.cn/post/nohup和&的作用详解.html,参与评论 »
--EOF--
发表于 2019-12-25 13:13:00。
本站使用「署名 4.0 国际」创作共享协议,转载请注明作者及原网址。更多说明 »
提醒:本文最后更新于 1782 天前,文中所描述的信息可能已发生改变,请谨慎使用。
Comments