让程序立即在命令行返回,因此它不依赖于启动它的shell

时间:2010-01-26 04:15:06

标签: linux shell command-line process return

某些程序在从命令行启动时立即返回,例如Firefox。大多数实用程序(以及我编写的所有程序)都与创建它们的shell绑定在一起。如果你控制命令行,程序就死了。

您需要添加什么来添加到程序或shell脚本以获得立即返回的行为?我想我在那里问了两个问题,一个用于shell脚本,一个用于一般,如果它们不同的话。我特别想知道是否有办法让一个可执行的jar来做它。

我几乎不好意思问一个,但我自己找不到答案。

谢谢!

4 个答案:

答案 0 :(得分:7)

start cmd 
在Windows上

cmd &

on * nux

这里替换

cmd = java -jar JarFile.jar

在* nux上, fg bg 命令也是你的朋友......

答案 1 :(得分:3)

您需要基本上需要分叉进程或创建新线程(或假装)

在* nux中,您可以在&之后使用/long/script &执行此操作,或者在Windows中创建执行流程然后退出的BATCH文件(它自然会这样做)。< / p>

注意:在分叉之后没有特别好的方法来引用这个过程,基本上只有ps进程列表。如果你想能够看到进程正在做什么,请查看使用screen(另一个linux命令),它将为你启动一个会话并让你“重新连接”到屏幕上。

要执行此操作,请安装屏幕(sudo apt-get install screenyum install screen)。然后键入screen以创建一个新会话(注意,它看起来像你没有做任何事情)。然后,运行您的/long/command(不使用&),然后按CTRL + A + D(同时)与其分离(它仍在运行!)。然后,当您想要重新附加时,请键入screen -r

此外,在任何帮助消息中查找标记,允许您在不使用上述选项的情况下执行此操作(例如在synergy中,您可以说synergy --background

答案 2 :(得分:3)

一个包装脚本,只包含:

your_prog_or_script &

将启动目标并立即退出。您可以将nohup添加到该行的开头,以便在退出shell时它将继续运行。

答案 3 :(得分:2)

对于可执行程序(而不是shell脚本),在Linux / Unix上使用fork()和exec()然后退出父进程,该进程将返回到shell。有关详细信息,请参阅手册页或某些页面,如http://www.yolinux.com/TUTORIALS/ForkExecProcesses.html