某些程序在从命令行启动时立即返回,例如Firefox。大多数实用程序(以及我编写的所有程序)都与创建它们的shell绑定在一起。如果你控制命令行,程序就死了。
您需要添加什么来添加到程序或shell脚本以获得立即返回的行为?我想我在那里问了两个问题,一个用于shell脚本,一个用于一般,如果它们不同的话。我特别想知道是否有办法让一个可执行的jar来做它。
我几乎不好意思问一个,但我自己找不到答案。
谢谢!
答案 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 screen
或yum 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。