我想找出我的 ~50 gnu 屏幕窗口中的哪个有一个进程,其中定义了一个特定的变量。例如,大约一周前,我这样做了:
id=ABC123456; ~/run_long_process $id
Run Code Online (Sandbox Code Playgroud)
这是在我的 ~50 gnu 屏幕窗口之一中运行的,它产生了大量的 STDOUT/STDERR 但是,除了向后滚动每个窗口或 Ctrl+Z 并恢复每个窗口之外,有没有办法找出哪个一个是?有什么建议?
如果这是 Linux,您可以按照这样的流程进行操作。作为“长时间运行的进程”的一个例子,我将使用“perl -e sleep”,它会永远休眠:
$ id=ABC123456; perl -e sleep $id
Run Code Online (Sandbox Code Playgroud)
现在,我们需要找到正在运行的进程:
$ ps -Af | grep [A]BC123456
user 30579 22013 0 09:32 pts/10 00:00:00 perl -e sleep ABC123456
# ^^^^^ parent PID
Run Code Online (Sandbox Code Playgroud)
现在我们有了父级的 PID,我们可以窥探它的环境,在其中screen
设置一个WINDOW
变量:
$ tr '\0' '\n' < /proc/22013/environ | grep WINDOW
WINDOW=3
Run Code Online (Sandbox Code Playgroud)
哪个是正确的。我在屏幕窗口 3 中运行它。由于这是一个环境变量,因此您的任务很有可能也会继承它(取决于exec()
使用的调用类型),因此您也可以窥探任务的环境,并找到相同的结果。