这是我在 Stack Exchange 上的第一个问题!我已经使用它很多年了,似乎总能找到解决方案,除了这个问题。
我正在努力顶部单独运行屏幕这样我就可以在后台监控单个进程的性能。我已命名屏幕实例,以便我在需要时轻松附加到它。我已将所有这些都放在脚本中,因为它们都是我正在尝试运行的大型监控实验的一部分,它大致如下。
screen -S TOP -D -m top -b -p $PID > top.log &
它应该做的是,它应该创建一个名为 top 的新屏幕会话,然后在创建时从中分离并运行 top 命令,这样就创建一个二进制文件 top.log 并将其放在后台。
除了文件已创建但未填充任何顶部数据之外,一切工作正常,而当我运行不带屏幕的命令时,它工作正常。看起来屏幕并不将重定向作为顶部命令的一部分,但无论如何都在创建文件,可能是作为单独命令的一部分。
目前,我默认使用 nohup 来运行顶部在后台,但我非常希望能够附加到屏幕上。
有任何想法吗?
答案1
您的重定向将仅引用screen
命令本身的输出,而不是屏幕终端中的输出。我建议您screenrc
为该屏幕实例创建一个特殊文件,其中包含以下内容:
session top -b -p $MYPID
sessionname TOP
logfile /path/to/top.log
log on
detach
MYPID
调用命令之前必须设置环境变量screen
。然后screen
使用-c
选项和文件名称调用screenrc
:
MYPID=$PID screen -c /path/to/top-screenrc
该screenrc
文件包含screen
手册页中说明的命令。它首先使用 创建一个新会话top
,设置会话名称,为其定义日志文件,然后开始记录。最后一步是,会话分离,命令返回到提示符。您不必在后台明确发送它(即&
不需要附加)。
我希望这符合你的问题。
答案2
尝试:
$(screen -S TOP -D -m top -b -p $PID > top.log) &
答案3
重定向输出的不是 screen,而是 shell(我猜是 bash)。提供的命令行将重定向 screen 程序的输出,而不是名为 TOP 的 screeen 会话:
screen -S TOP -D -m top -b -p $PID > top.log &
我接下来会尝试这个:
screen -S TOP -D -m " top -b -p $PID > top.log " &
如果 screen 将引号中的部分视为单个命令或文件名并失败,则可能需要将 top 命令制作成单行脚本文件。