可以这样做:
nohup ./run.sh > /dev/null 2>&1 &
它将进程发送到后台,丢弃其输出并允许我们关闭终端。
有没有可能使用脚本本身来做到这一点?我的意思是,我会执行这个:
./run.sh
在脚本的某个地方,我们可以做这样的事情:
nohup "$0" > /dev/null 2>&1 &
那么当脚本运行时,它的行为与上面相同吗?
我想我们可以为此有两个单独的脚本。但是,是否可以在单个脚本中完成?
我这样问是因为脚本将从系统调用,并且我不想更改系统调用脚本的方式,我宁愿更改脚本的执行方式。
答案1
如果您需要决定脚本是否应该在后台执行,或者它是否已经是后台脚本(例如命令行参数),您可以实现这一点。
假设您通常调用脚本
./run.sh
您可以添加一个命令行参数,例如bg
告诉脚本它已经在第二次执行中,因此它不会无限次地递归调用自身(或直到系统资源用完)。
./run.sh bg
你可以这样实现
#! /bin/sh
if [ "$1" = "bg" ]
then
# do the normal work
else
nohup "$0" bg > /dev/null 2>&1 &
fi