Kilian Asked: 2022-04-12 23:31:26 +0800 CST2022-04-12 23:31:26 +0800 CST 2022-04-12 23:31:26 +0800 CST 监视输出到 /dev/null 772 我有一些科学程序可以运行几分钟到几天。该程序将进度信息打印到以回车结尾的标准输出。 如果程序运行了几天,我通常将输出通过管道传输到 /dev/null 以避免巨大的日志文件。 有没有办法定期查看程序的输出,而不必保留所有生成的文本? terminal stdout 2 个回答 Voted Best Answer dr_ 2022-04-13T05:51:51+08:002022-04-13T05:51:51+08:00 您应该 ssh 到服务器,然后运行screen以启动会话。从那里,启动您长时间运行的科学程序(让它正常输出到标准输出),然后随时断开连接。每当您想查看输出时,再次 ssh 回到服务器并运行screen -R以重新连接到最后一个分离的会话。 您也可以使用tmux代替screen,它的工作原理类似。只需运行tmux attach-session而不是screen -R. 要对尚未在屏幕会话中启动的科学程序实例执行相同操作:找到程序 PID,然后运行: screen reptyr <PID> 将其重新附加到您的新屏幕会话。 Kaz 2022-05-10T00:43:34+08:002022-05-10T00:43:34+08:00 我刚刚在这个确切的问题领域开发了一个新的解决方案pw:(管道监视)实用程序。 这是一个小型的、获得 BSD 许可的 C 程序,在单个文件中不到 2000 行,没有库依赖项,生成的可执行文件很小,内存占用也很小。 pw不断地读取它的标准输入,所以它吃掉所有东西,就像/dev/null. 它通过内部 FIFO 缓冲区传递输入行,该缓冲区被采样以创建更新显示。 当pw检测到它已被 shell 作业控制后台处理时,它仍会读取其输入,但不会刷新显示。 这真的很简单: yourlongrunningprogram | pw & 然后fg进入前台查看最新输出;Ctrl-Z并bg再次在后台运行。 pw有一些不错的交互功能:过滤、触发、分屏操作、快照历史记录。用户界面是 Vi 的模因:有:冒号命令等。有些命令有数字前缀,重复一个命令是用.. 假设您已经运行程序几个小时或几天,并认为其输出的某些部分没有提供信息。没问题,只是:v pattern和不匹配pattern的行现在被拒绝。 最近开发的功能是您可以将状态保存pw到文件中。如果您以某种方式进行交互设置,您可以轻松地从保存的文件中重现该设置:所有过滤器、触发器、分屏配置和其他参数。
您应该 ssh 到服务器,然后运行
screen
以启动会话。从那里,启动您长时间运行的科学程序(让它正常输出到标准输出),然后随时断开连接。每当您想查看输出时,再次 ssh 回到服务器并运行screen -R
以重新连接到最后一个分离的会话。您也可以使用
tmux
代替screen
,它的工作原理类似。只需运行tmux attach-session
而不是screen -R
.要对尚未在屏幕会话中启动的科学程序实例执行相同操作:找到程序 PID,然后运行:
将其重新附加到您的新屏幕会话。
我刚刚在这个确切的问题领域开发了一个新的解决方案
pw
:(管道监视)实用程序。这是一个小型的、获得 BSD 许可的 C 程序,在单个文件中不到 2000 行,没有库依赖项,生成的可执行文件很小,内存占用也很小。
pw
不断地读取它的标准输入,所以它吃掉所有东西,就像/dev/null
. 它通过内部 FIFO 缓冲区传递输入行,该缓冲区被采样以创建更新显示。当
pw
检测到它已被 shell 作业控制后台处理时,它仍会读取其输入,但不会刷新显示。这真的很简单:
然后
fg
进入前台查看最新输出;Ctrl-Z并bg
再次在后台运行。pw
有一些不错的交互功能:过滤、触发、分屏操作、快照历史记录。用户界面是 Vi 的模因:有:
冒号命令等。有些命令有数字前缀,重复一个命令是用.
.假设您已经运行程序几个小时或几天,并认为其输出的某些部分没有提供信息。没问题,只是
:v pattern
和不匹配pattern
的行现在被拒绝。最近开发的功能是您可以将状态保存
pw
到文件中。如果您以某种方式进行交互设置,您可以轻松地从保存的文件中重现该设置:所有过滤器、触发器、分屏配置和其他参数。