我将在我大学的 Linux 集群上运行 prog.cpp(使用 gcc 编译)。我预计该程序需要 3-6 天才能完成。我打算将其运行为
./prog &
在后台运行。我的问题是:
- 关闭终端窗口是否安全?
- 我如何知道程序何时完成?我可以让 GCC 以某种方式通知我吗?
答案1
答案2
你的程序与 GCC 无关。它已经已编译由 GCC 编写,但您不需要 GCC 来运行它(并且您可以在其他地方编译它)。
你可能会跑
nohup ./prog
但我真的建议使用批系统(通过atd
或batch
命令提供at
)例如
batch << END
./prog
END
atd
批处理完成后,守护进程会向您发送一封电子邮件。使用该命令at
,您还可以提供一个小时(启动程序的时间)。
答案3
不,如果您希望后台程序继续运行,那么在后台程序运行时退出终端窗口通常是不安全的。
原因是,当你退出终端时,你通常会向程序发送一个信号(一般是 HANGUP 信号,如果我没记错的话)。默认情况下,程序在收到此信号时会退出。
正如另一个答案中所述,尝试使用 nohup(1) 或 screen(1) 程序,它允许您断开连接(故意或意外)并稍后重新连接。
至于电子邮件通知,请尝试以下方法:
nohup sh -c 'prog; echo "all done" | mail -s results [email protected]' &
答案4
如果您可以使用 zsh 终端启动程序并使用后台命令启动它,则无需担心 nohup 或 disown 命令。Zsh 是 ash 或 bash 的替代 shell,具有一些不错的功能,例如,目录列表的起始颜色更漂亮。我经常将它与 lighttpd 和后台命令一起使用。