不知道如何用谷歌搜索这个(我尝试了一些东西但没有得到太多)或者这是如何调用的。这是我的典型工作流程:
- 通过 SSH 连接到服务器
- 在那里运行一些东西并让它在后台运行(例如 bg 命令)
- 退出 SSH 并稍后再回来
当我稍后回来时,有什么办法可以查看进程是否被终止以及它被终止的状态(段错误或其他)或获取我正在运行的进程的任何类型的退出状态信息?例如,如果我正常运行它并保持终端打开,它会打印分段错误或其他内容,但我不知道在断开连接并再次连接后如何获取此状态。
答案1
使用screen
或tmux
使交互式会话在断开连接后继续存在。
对于,您可以使用 来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
一种方法是将程序的输出重定向到文件。在bash
shell 中你可以这样做:
{ 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
}