Shell 脚本启动新进程但关闭终端窗口

Shell 脚本启动新进程但关闭终端窗口

我是 shell 脚本的新手。我正在编写一个启动脚本,该脚本接受一个参数并根据该参数值启动一个进程。

示例:我想使用这样的启动脚本启动位于某个目录内的 groovyConsole。

sh Starter.sh groovy 

脚本中的逻辑如下

if [ $1 = "groovy" ] 
then
    cd Works/Groovy/groovy-1.8.6/bin
    ./groovyConsole
fi

这确实启动了进程,但我发现该进程与终端窗口绑定。如果我关闭终端窗口,进程将被终止(显然)。所以我想知道是否有一种方法,运行上述命令将执行脚本并启动进程,但关闭终端窗口?

答案1

您可以使用以下方式将其从当前进程中分离出来nohup&

如果[$1 =“groovy”]
然后
    cd Works/Groovy/groovy-1.8.6/bin
    nohup./groovyConsole& 复制代码

这会使命令 groovyConsole 一直运行,直到您将其终止。但这不会关闭终端窗口,但您可以这样做...

sh Starter.sh groovy && exit

答案2

我不是专家,但是这应该如何运作。

if [ $1 = "groovy" ] 
then
    Works/Groovy/groovy-1.8.6/bin/groovyConsole &
    exit
fi

解释:

  1. 不需要CD,直接用绝对路径运行就可以。
  2. &在后台启动应用程序
  3. exit 退出终端

答案3

尝试将 ./groovyConsole 更改为 ./groovyConsole & 并在行后添加 exit

答案4

为了使 shell 脚本关闭其父进程,它必须明确地终止它。它也是一个这样做非常不好(因为以后您可能会在非预期的环境中运行此脚本),但如果您真的愿意,您可以尝试:

#!/bin/sh
if [ $1 = "groovy" ] 
then
    cd Works/Groovy/groovy-1.8.6/bin
    nohup ./groovyConsole &
    kill $PPID
fi

相关内容