退出zsh,但保持运行的作业打开?

刚刚从bash切换到zsh。

在bash中,后台任务在shell退出时继续运行。 例如在这里, dolphinexit之后继续运行:

 $ 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的NOHUPSIGHUP信号
  • 并使进程在子terminal的后台运行
  • 随后是参数(作业列表中的作业编号的索引)会阻止shell向subprocess发送SIGHUP信号。 使用disown带参数的disown会导致它默认为最近的作业。

我在这个页面find了nohupdisown信息,在这个答案中的信息 。