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


95

刚刚从bash切换到zsh。

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

$ dolphin .
^Z
[1]+  Stopped                 dolphin .
$ bg
[1]+ dolphin . &
$ exit

这就是我想要的默认行为。

相比之下,zsh的行为是警告有关在上运行作业exit,然后exit再次关闭它们。例如这里,dolphin当第二个关闭exit命令实际退出外壳:

 % dolphin .
^Z
zsh: suspended  dolphin .
 % bg
[1]  + continued  dolphin .
 % exit
zsh: you have running jobs.
 % exit 

如何在这里像bash一样使zsh成为默认行为?

Answers:


168

使用以下命令启动程序&!

dolphin &!

&!或等效地,&|)是zsh的特定快捷方式既背景 否认的过程中,使得离开壳会离开它运行。


2
为了完整起见,您还可以列出启动后如何将其删除吗?
trusktr

@trusktr关于放弃前台进程还有一个不同的问题。为了清晰起见,我认为最好将其分开。对于特别对zsh感兴趣的人,我在U&L SE上了一个有关如何创建更快的工作流以放弃前台流程的问题
安科

我喜欢这个解决方案,我将为单个命令实现它,但是我仍在寻找一种更改Zsh默认行为的方法。
文斯

1
@Vince您的意思是将默认值更改为始终放弃后台进程吗?如果是这样,你可以做到这一点setopt nohup在你的~/.zshrc。然后,启动带有的后台命令&也将始终将其取消。尽管默认情况下zsh仍会提醒您尝试退出时正在运行的作业。您也可以使用将其关闭setopt nocheckjobs
Anko

@Anko我想做setopt nocheckjobs我想要的。现在,我在中找到了可用的选项man zshoptions。我想关闭警告。我知道有后台流程并且不需要它。我希望它可以关闭后台进程,除非我以开始nohup。我目前将此功能与shell函数配合使用,该函数在后台运行PyCharmnohup。当我键入pycharm .它运行nohup charm $@ &。当我关闭终端时,它没有关闭,但是我仍然收到该警告,并且必须键入exit两次。
文斯

59

zsh文档中

HUP

...在zsh中,如果有一个后台作业在shell退出时运行,则shell会假定您希望将其杀死;在这种情况下,它会发送一个名为SIGHUP...的特定信号。如果您经常启动即使在退出shell后仍应继续的作业,则可以设置option NO_HUP,而后台作业将被保留。

因此,只需设置NO_HUP选项:

% setopt NO_HUP

如果您不想要警告,是的。
卡尔·诺鲁姆

30

我发现,使用的组合nohup&以及disown对我的作品,因为我不想永远当外壳已经退出原因的工作运行。

nohup <command> & disown

虽然只是&为我工作的bash,我只使用时发现nohup&disown在运行命令,这样调用Java运行命令的脚本,该过程仍然会在外壳退出停止。

  • nohup使命令忽略NOHUPSIGHUP从外壳发出信号
  • & 使该过程在子终端中在后台运行
  • disown后跟一个参数(作业列表中作业编号的索引)可防止ShellSIGHUP向子进程发送信号。disown不带参数使用将使其默认为最新作业。

我在此页面上找到了nohupdisown信息,并在此SO答案中找到了信息。&


5

我通常screen用于保持后台作业运行。

1)创建一个屏幕会话:

screen -S myScreenName

2)启动您的脚本,服务,守护程序或任何其他内容

3)退出(分离)屏幕会话

screen -d

或捷径 ALT+A then d


几百年后-如果您想恢复会话(重新连接):

screen -r myScreenName

如果您想知道是否有屏幕会话,其名称和状态(已附加或已分离):

screen -ls

该解决方案适用于所有终端解释器,例如bash,zsh等。另请参见 man screen


MacOS用户的注释,从屏幕分离的键盘快捷键是Control + A,然后是D。这也是我唯一的选择,当我让进程运行并屈服于stdout并编写screen -d时无济于事。
比绍伊

很好,但是与Q无关,后者专门涉及退出ZSH时如何保持bg任务运行。
RichieHH
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.