Bash 退出zsh,但保持正在运行的作业处于打开状态?
刚从bash切换到zsh 在bash中,后台任务在shell退出时继续运行。例如,此处,Bash 退出zsh,但保持正在运行的作业处于打开状态?,bash,zsh,jobs,Bash,Zsh,Jobs,刚从bash切换到zsh 在bash中,后台任务在shell退出时继续运行。例如,此处,dolphin在退出后继续运行: $ dolphin . ^Z [1]+ Stopped dolphin . $ bg [1]+ dolphin . & $ exit 这就是我想要的默认行为 相反,zsh的行为是警告在exit上运行作业,如果再次exit,则关闭作业。例如,当第二个exit-命令实际退出shell时,dolphin关闭: % dolphin . ^
dolphin
在退出后继续运行:
$ dolphin .
^Z
[1]+ Stopped dolphin .
$ bg
[1]+ dolphin . &
$ exit
这就是我想要的默认行为
相反,zsh的行为是警告在exit
上运行作业,如果再次exit
,则关闭作业。例如,当第二个exit
-命令实际退出shell时,dolphin
关闭:
% dolphin .
^Z
zsh: suspended dolphin .
% bg
[1] + continued dolphin .
% exit
zsh: you have running jobs.
% exit
如何使zsh的默认行为与bash的一样 来自:
HUP
。。。在zsh中,如果您在shell退出时有一个后台作业正在运行,那么shell将假定您希望该作业被终止;在这种情况下,它被发送一个名为SIGHUP
。。。如果您经常启动即使在shell退出时也应该继续的作业,那么您可以设置选项NO\u HUP
,后台作业将不受影响
因此,只需设置NO\u HUP
选项:
% setopt NO_HUP
我发现结合使用
nohup
、&
和disown
对我很有效,因为我不想在shell退出时永久性地导致作业运行
nohup <command> & disown
nohup&disown
虽然我在bash
中使用了&
,但我发现,在运行命令时仅使用nohup
、&
或disown
,比如调用java运行命令的脚本,当shell退出时,进程仍然会停止
使命令忽略来自外壳的nohup
和nohup
信号SIGHUP
使进程在子终端的后台运行&
后跟一个参数(作业列表中作业编号的索引)可防止shell向子进程发送disown
信号。在没有参数的情况下使用SIGHUP
会使其默认为最近的作业disown
我在中找到了
nohup
和disown
信息,在中找到了&
信息。用&>启动程序代码>:
dolphin &!
&
()是一个特定于zsh的快捷方式,用于后台和断开进程,这样退出shell将使其保持运行。我通常使用屏幕
来保持后台作业运行
1)创建屏幕会话:
screen -S myScreenName
2)启动您的脚本、服务、守护进程或任何东西
3)使用退出(分离)屏幕会话
screen -d
或
快捷方式ALT+A然后是d
几百年后-如果您想恢复会话(重新连接):
如果您想知道是否有屏幕会话、其名称及其状态(已连接或已分离):
此解决方案适用于所有终端解释器,如bash、zsh等。
如果您不想看到警告,请参见man screen
,是的。为完整起见,您还可以列出启动后如何断开该警告?@trusktr。我认为为了清晰起见最好分开。对于任何对zsh特别感兴趣的人,我已经问过了。我喜欢这个解决方案,我将为单个命令实现它,但我仍在寻找一种方法来更改zsh的默认行为。@Vince您的意思是将默认更改为始终拒绝后台进程吗?如果是这样,您可以在~/.zshrc
中使用setopt nohup
来执行此操作。然后以&
为背景启动命令也将始终拒绝该命令。尽管默认情况下,当您尝试退出时,zsh仍会提醒您有正在运行的作业。你也可以用setopt nocheckjobs
@DimiDak关闭它,这对我来说也很好<代码>别名z=“sudo sleep 1&|”
。构造这样的最小示例,最终会缩小范围。MacOS用户需要注意的是,从屏幕分离的键盘快捷键是Control+A,然后是D。当我让进程运行并屈服于标准输出时,这也是我唯一的选择,在那个里写screen-d并没有什么帮助。很好,但和Q无关,Q是关于如何在退出ZSH时保持bg任务运行的。
screen -r myScreenName
screen -ls