退出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信息,在这个答案中的信息 。