小编Lui*_*len的帖子

为什么在使用 "> /dev/null 2>&1 &" 执行时不会在注销时终止作业?

当您运行如下示例的作业时,它们会在您注销时被杀死:

$ ./job.sh &
Run Code Online (Sandbox Code Playgroud)

但是,当您按照下面的示例执行它们时,将 stdout/dev/null和 stderr重定向到 stdout 并将作业置于后台,当您注销时,它们不会被终止。它有点像 nohup,只是输出转到/dev/null而不是文件。

$ ./job.sh > /dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)

我注意到一些守护进程是这样​​工作的,然后我很想知道它们在注销时没有被杀死的原因。

有人可以解释我为什么吗?

编辑 1:

正如@Patrick 在他的评论中所建议的那样,我对有史以来最简单的工作进行了同样的尝试,结果是一样的:当我注销时,工作并没有消失。

# while true; do sleep 1; done > /dev/null 2>&1 &
[1] 4320
# logout

luis-macbook:~ luis$
luis-macbook:Downloads luis$ ssh server
luis.alen@server's password: 
# jobs
#
# ps -ef | grep 4320
root      4320     1  0 01:17 ?        00:00:00 -bash
Run Code Online (Sandbox Code Playgroud)

编辑2:

按照帕特里克的再次要求,我在没有重定向流的情况下做了同样的测试,令我惊讶的是,这个过程并没有终止。现在我完全糊涂了......我发誓我记得当你注销时,进程在后台死亡。我完全错了吗?

# while true; do sleep 1; done &
[1] 20720
# logout …
Run Code Online (Sandbox Code Playgroud)

job-control stdout

5
推荐指数
1
解决办法
1364
查看次数

标签 统计

job-control ×1

stdout ×1