项目完成后的通知

项目完成后的通知

我将在我大学的 Linux 集群上运行 prog.cpp(使用 gcc 编译)。我预计该程序需要 3-6 天才能完成。我打算将其运行为

./prog &

在后台运行。我的问题是:

  1. 关闭终端窗口是否安全?
  2. 我如何知道程序何时完成?我可以让 GCC 以某种方式通知我吗?

答案1

不,./prog &这还不够:会话结束时你的程序将被终止。

你可以使用nohup

nohup ./prog &

更灵活的选择是使用 GNUscreen

至于电子邮件通知,我个人会编写一个两行 shell 脚本,第一行在./prog前台运行,第二行使用mail发送通知。然后可以使用nohup或在screen会话内运行该脚本。

答案2

你的程序与 GCC 无关。它已经已编译由 GCC 编写,但您不需要 GCC 来运行它(并且您可以在其他地方编译它)。

你可能会跑

 nohup ./prog

但我真的建议使用系统(通过atdbatch命令提供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 和后台命令一起使用。

相关内容