通过 SSH 获取进程的退出状态

通过 SSH 获取进程的退出状态

不知道如何用谷歌搜索这个(我尝试了一些东西但没有得到太多)或者这是如何调用的。这是我的典型工作流程:

  1. 通过 SSH 连接到服务器
  2. 在那里运行一些东西并让它在后台运行(例如 bg 命令)
  3. 退出 SSH 并稍后再回来

当我稍后回来时,有什么办法可以查看进程是否被终止以及它被终止的状态(段错误或其他)或获取我正在运行的进程的任何类型的退出状态信息?例如,如果我正常运行它并保持终端打开,它会打印分段错误或其他内容,但我不知道在断开连接并再次连接后如何获取此状态。

答案1

使用screentmux使交互式会话在断开连接后继续存在。

对于,您可以使用 来screen分离会话。您会看到类似这样的消息Ctrlad

[detached from 12345.pts-9.hostname]

然后您就可以安全地断开连接。当您重新连接时,screen -r将使您回到原来的位置。

对于tmux,使用Ctrlbthend分离并tmux attach重新连接。

答案2

使用 # screen 命令进行后台进程,您可以轻松地在屏幕中检查后台进程,有关更多信息,请参阅此站点 ->http://www.howtoing.com/screen-command-examples-to-manage-linux-terminals/

答案3

一种方法是将程序的输出重定向到文件。在bashshell 中你可以这样做:

{ myprog; echo "Exit status: $?"; } </dev/null &>output_file & disown

请注意,如果您要退出会话ssh,则需要确保通过如上所述重定向所有输出来断开进程与终端的连接。

如果您想避免再次登录以检查命令的输出,一种选择是让服务器通过电子邮件将输出发送给您(前提是已正确设置)。.bashrc如果您必须经常重复此操作,则在服务器上创建函数可能是一种更简单的方法:

run_and_email () {
  {
    {
      "$@"
      echo "Exit status: $?"
    } 2>&1 |
    mail -s "$1 output" [email protected]
  } </dev/null &>/dev/null & disown
}

相关内容