Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux nohup在最后运行带有符号的进程后台时没有效果?_Linux_Nohup - Fatal编程技术网

Linux nohup在最后运行带有符号的进程后台时没有效果?

Linux nohup在最后运行带有符号的进程后台时没有效果?,linux,nohup,Linux,Nohup,据我所知,nohup可以在不关心终端退出的情况下保持进程运行。但我发现,当我在后台运行一个进程时(没有nohup),最后使用符号(&),然后退出终端,我仍然可以在机器中找到正在运行的进程 这里有一个简单的例子;我运行以下命令,然后退出终端: ping localhost & 但是,我发现“ping”进程仍然在机器中运行,尽管我没有在这里使用nohup。我是否误解了nohup的实际用法?从会话注销后,您看到进程仍在运行的原因可能是您的shell在注销时没有发出sighup。 您可以通过运

据我所知,
nohup
可以在不关心终端退出的情况下保持进程运行。但我发现,当我在后台运行一个进程时(没有
nohup
),最后使用符号(
&
),然后退出终端,我仍然可以在机器中找到正在运行的进程

这里有一个简单的例子;我运行以下命令,然后退出终端:

ping localhost &

但是,我发现“ping”进程仍然在机器中运行,尽管我没有在这里使用
nohup
。我是否误解了nohup的实际用法?

从会话注销后,您看到进程仍在运行的原因可能是您的shell在注销时没有发出sighup。 您可以通过运行以下命令来确认:

shopt | grep hupon 
我假设它将返回类似于
huponexit off

并不能保证每个Linux/shell都能做到这一点,因此为了保证安全和脚本的可移植性,我建议使用
nohup
。例如

nohup ping localhost &
要确认,您还可以通过运行来启用
huponexit

shopt -s huponexit

然后在不使用nohup的情况下运行您的命令,注销/退出shell并检查您的进程是否仍在运行。

从会话注销后,您看到进程仍在运行的原因可能是您的shell在注销时没有发送sighup。 您可以通过运行以下命令来确认:

shopt | grep hupon 
我假设它将返回类似于
huponexit off

并不能保证每个Linux/shell都能做到这一点,因此为了保证安全和脚本的可移植性,我建议使用
nohup
。例如

nohup ping localhost &
要确认,您还可以通过运行来启用
huponexit

shopt -s huponexit

然后在不使用
nohup
的情况下运行命令,注销/退出shell并检查进程是否仍在运行。

使用
pidof ping
查找进程的
pid
,然后
kill pid
。(或者只需键入
top
在树中找到pid,键入
k
用于
kill
并输入
pid
)是的,
ping
将永远运行,除非您限制
-c(计数)
。如果只运行
ping
进程,只需
killall ping
即可。(您也可以在您启动的同一终端中键入
fg
,将其带回到前台,然后只需执行
[ctrl+c]
(有很多方法可以剥这只猫的皮)
nohup命令&
命令&
是不一样的。最后一个可以通过运行
fg
带到前面,也可以通过
jobs
查找它。不仅是ping进程,我发现了任何可以运行很长时间的进程,当我把它放在后台而不使用nohup并退出终端时,它不会受到影响y终端。因此我怀疑它是否需要nohup,为什么nohup总是与符号(&)一起使用,以及使用nohup的最佳方案是什么。使用
pidof ping
查找流程的
pid
,然后
杀死pid
。(或者只需键入
top
在树中找到pid,键入
k
用于
kill
并输入
pid
)是的,
ping
将永远运行,除非您限制
-c(计数)
。如果您只运行
ping
进程,只需
killall ping
即可。(您也可以在您启动的同一终端中键入
fg
,将其带回到前台,然后只需执行
[ctrl+c]
(有很多方法可以剥这只猫的皮)
nohup命令&
命令&
是不一样的。最后一个可以通过运行
fg
带到前面,也可以通过
jobs
查找它。不仅是ping进程,我发现了任何可以运行很长时间的进程,当我把它放在后台而不使用nohup并退出终端时,它不会受到影响所以我怀疑这里是否需要nohup,为什么nohup总是和符号(&)一起使用,以及使用nohup的最佳方案是什么。