【问题标题】:Detaching a background process in zsh so that I can close the terminal在 zsh 中分离后台进程,以便我可以关闭终端
【发布时间】:2024-01-07 05:37:01
【问题描述】:

我有一个终端进程在 Cygwin 环境中运行 zsh。我想启动一个后台进程,然后关闭终端进程并让后台进程运行。但是,当我退出终端时,我收到无法退出的错误消息,因为后台进程仍在运行。示例:

sleep 300 &
exit

我收到消息 zsh: you have running jobs.

同理

nohup sleep 300 &

从 zsh 的手册页中,我看到有一个名为 disown 的命令,根据描述,它可能会执行我想要的操作,但我不知道如何使用它。根据手册页,它需要一个参数 job,但没有说明这个参数实际上是什么。我试过了

sleep 300 &
disown $!

但是得到消息disown: job not found: 3964,所以job显然不是PID。

我怎样才能正确地做到这一点?

【问题讨论】:

  • 我不认为这是 cygwin 的可能性,你的环境在你关闭窗口的那一刻停止运行

标签: cygwin zsh


【解决方案1】:

你需要通过它的工作编号来引用工作

sleep 3000
control-z
bg
jobs
disown %3 (or whatever job number)

【讨论】:

  • 这确实有效。由于我想从我的 .zshrc 提供的 shell 函数中执行此操作,这意味着我必须解析 jobs 命令的输出。行,不方便,但可以做到。非常感谢。
【解决方案2】:

希望这仍然对其他读者有所帮助:disown 不带任何参数会断开作业号为 %1 的作业。

此外,您可能还想查看AUTO_CONTINUE on Ctrl-Z 函数。

【讨论】: