gnu screen:查找哪个屏幕窗口具有给定的正在运行的进程或变量?

gnu screen:查找哪个屏幕窗口具有给定的正在运行的进程或变量?

我想找出我的大约 50 个 gnu screen 窗口中的哪一个正在运行一个带有特定变量的进程。例如,大约一周前,我做了以下事情:

id=ABC123456; ~/run_long_process $id

它在我的 ~50 个 gnu screen 窗口之一中运行,并产生大量 STDOUT/STDERR,但除了向后滚动每个窗口或按 Ctrl+Z 并恢复每个窗口外,还有其他方法可以找出它是哪一个吗?有什么建议吗?

答案1

如果这是 Linux,您可以遵循类似这样的过程。作为“长时间运行的进程”的示例,我将使用“perl -e sleep”,它将永远处于休眠状态:

$ id=ABC123456; perl -e sleep $id

现在,我们需要找到正在运行的进程:

$ ps -Af | grep [A]BC123456
user  30579 22013  0 09:32 pts/10   00:00:00 perl -e sleep ABC123456
#           ^^^^^ parent PID

现在我们有了父进程的 PID,我们就可以窥探它的环境,在其中screen设置一个WINDOW变量:

$ tr '\0' '\n' < /proc/22013/environ | grep WINDOW
WINDOW=3

这是正确的。我在屏幕窗口 3 中运行它。由于这是一个环境变量,因此您的任务也很有可能继承它(取决于exec()使用哪种类型的调用),因此您可能也可以窥探任务的环境,并找到相同的结果。

相关内容