Mac 上的 nohup 命令

Mac 上的 nohup 命令

我使用 SSH 连接到一些 Mac 机器并运行类似于以下命令:

nohup /var/root/install.sh param1 param2 </dev/null >/var/root/vvv.out 2>&1 & echo '' ; echo ERROR_CODE:$?

它似乎运行良好,但如果我在安装过程中关闭会话,会话就会卡住并且使用该ps命令可见。

同样的技巧似乎在 Linux 机器上也能成功运行。

有任何想法吗?

编辑:环境详细信息为 7.9.0 Darwin 内核版本 7.9.0:2005 年 3 月 30 日星期三 20:11:17 PST;root:xnu/xnu-517.12.7.obj~1/RELEASE_PPC Power Macintosh powerpc

会不会是这个版本太旧了?维基百科powerpcs 一直受支持直到 2006 年 8 月。

答案1

ID猜测这是因为该进程仍由其控制终端拥有,当控制终端消失时,它会感到困惑。如果您bash在远端使用,您可以尝试添加一个调用来disown重新设置它的父级。

答案2

我认为“shell 内置”nohup 和程序 nohup 之间存在差异。您可能还希望使用 ssh -n 而不是普通的 ssh 来解决这个问题。

我的 MacBook 已经有一段时间无法使用,这只是我猜测的原因。:)

答案3

你说得对,它不一定能正常工作。我认为这可能与 OS 10 基于 Unix 有关,它们不使用相同版本的 nohup 或类似的东西。我不确定,但我在 SunOS 5.10 上尝试过 nohup,它的工作方式与在 linux 上不同。

这让我注意到了一个可爱的程序,叫做 screen。我记得,screen 在 UNIX/Linux 系统上是默认可用的。

使用 [CTRL] - A,然后按 D 退出屏幕。使用 screen -r 恢复会话。如果您正在运行多个 screen 实例,您将自动看到每个 screen 实例的进程 ID,并且您必须通过键入 screen -r #process-id 来指定进程。

提示:您可以通过调用 screen -x 同时在多个登录上运行相同的 screen 实例。这对于 ssh 或同一台计算机上的不同终端非常有用。如果您有一台笔记本电脑通过串行控制台插入,而您又不能随身携带电脑,这将非常有用。screen 可以与串行设备交互。只需尝试 screen /dev/ttyS0 或任何设备名称即可!

高频

答案4

命令行末尾有一个回显,但是如果您关闭了终端,该回显应该去哪里?Linux 上的回显去哪里?我很好奇,如果您删除末尾的回显并将其作为测试运行,会发生什么。

您可以编写整个脚本并将输出重定向到电子邮件或文件。

相关内容