Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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 让程序立即在命令行返回,以便它';它与发射它的外壳无关_Linux_Shell_Command Line_Process_Return - Fatal编程技术网

Linux 让程序立即在命令行返回,以便它';它与发射它的外壳无关

Linux 让程序立即在命令行返回,以便它';它与发射它的外壳无关,linux,shell,command-line,process,return,Linux,Shell,Command Line,Process,Return,有些程序从命令行启动时会立即返回,例如Firefox。大多数实用程序(以及我编写的所有程序)都绑定到创建它们的shell。如果你控制命令行,程序就死了 为了获得立即返回行为,您必须向程序或shell脚本添加什么?我想我要问两个问题,一个是shell脚本,一个是常规脚本,如果它们不同的话。我特别想知道是否有一种方法可以让一个可执行的jar来执行它 我几乎不好意思问这个问题,但我自己找不到答案 谢谢 您基本上需要分叉一个进程或创建一个新线程(或假装) 在*nux中,您可以在像这样的/long/scr

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

为了获得立即返回行为,您必须向程序或shell脚本添加什么?我想我要问两个问题,一个是shell脚本,一个是常规脚本,如果它们不同的话。我特别想知道是否有一种方法可以让一个可执行的jar来执行它

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


谢谢

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

在*nux中,您可以在像这样的
/long/script&
命令之后使用
&
来执行此操作,或者在windows中,您可以创建一个批处理文件,该文件执行您的进程,然后退出(它自然会执行此操作)

注意:没有特别好的方法在分叉后引用此流程,基本上只有流程列表的
ps
。如果您希望能够查看进程正在执行的操作,请使用
屏幕
(另一个linux命令)进行检查,该命令将为您启动会话并允许您“重新连接”屏幕

要执行此操作,请安装屏幕(
sudo-apt-get-install-screen
yum-install-screen
)。然后键入
screen
创建一个新会话(注意,看起来您什么都没做)。然后,运行
/long/命令
(不带
&
),然后按
CTRL+A+D
(同时)从中分离(它仍在运行!)。然后,如果要重新连接,请键入
screen-r

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

在窗户上

cmd &
关于*nux

这里代替

cmd = java -jar JarFile.jar

在*nux上,fgbg命令也是您的朋友……

对于可执行程序(与shell脚本相反),在Linux/Unix上使用fork()和exec(),然后退出父进程,该进程将返回shell。有关详细信息,请参阅手册页或类似的页面

一个包装脚本,只包含以下内容:

your_prog_or_script &

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

感谢您提供的信息。不&只是把过程放在后台?当我关闭终端仿真器时,进程仍然会停止。正如丹尼斯所说,诺胡普是你的朋友。然后通过pid使用top等进行杀戮。谢谢!丹尼斯也是。看起来nohup和fork/exec是我一直在寻找的答案。另请参阅daemon()调用,它将使它成为一个真正的后台进程(从tty分离并创建一个新会话)Dup:(from),也可能(从中似乎需要已经知道部分答案)。很适合不删除BTW。这个标题是一个自然的表达,它将以不同的方式搜索windows(因为google把我带到这里)
your_prog_or_script &