退出zsh,但保持运行的作业打开?
刚刚从bash切换到zsh。
在bash中,后台任务在shell退出时继续运行。 例如在这里, dolphin
在exit
之后继续运行:
$ dolphin . ^Z [1]+ Stopped dolphin . $ bg [1]+ dolphin . & $ exit
这是我想要的默认行为。
相比之下,zsh的行为是警告在exit
运行的工作,然后closures他们,如果你再次exit
。 例如在这里,当第二个exit
命令实际退出shell时, dolphin
被closures:
% dolphin . ^Z zsh: suspended dolphin . % bg [1] + continued dolphin . % exit zsh: you have running jobs. % exit
如何使zsh的默认行为如bash的?
开始程序 –
dolphin &!
&!
( 或者等价地说, &|
)是一个zsh特定的快捷方式,用于后台进程和 closures进程,这样退出shell将会使其运行。
从zsh文档 :
HUP
…在zsh中,如果你有一个后台作业在shell退出的时候运行,那么shell会假设你想要被杀掉; 在这种情况下,它会发送一个特定的信号,称为
SIGHUP
…如果您经常启动即使shell已经退出也应该继续的作业,那么您可以设置NO_HUP
选项,后台作业将被单独保留。
所以只需设置NO_HUP
选项:
% setopt NO_HUP
我发现使用nohup
, &
和disown
的组合对我来说是disown
,因为我不希望在shell退出时永久性地导致作业运行。
nohup <command> & disown
虽然在bash
中我已经为我工作了,但是在仅使用nohup
, &
,或者在运行命令(如调用java运行命令的脚本)时,我发现这个过程仍然会在退出shell时停止。
-
nohup
使该命令忽略来自shell的NOHUP
和SIGHUP
信号 - 并使进程在子terminal的后台运行
- 随后是参数(作业列表中的作业编号的索引)会阻止shell向subprocess发送
SIGHUP
信号。 使用disown
带参数的disown
会导致它默认为最近的作业。
我在这个页面find了nohup
和disown
信息,在这个答案中的信息 。