
我想找出我的大約 50 個 gnu 螢幕視窗中的哪個進程運行著其中定義的特定變數。例如,大約一周前,我這樣做了:
id=ABC123456; ~/run_long_process $id
它在我的 ~50 個 gnu 螢幕視窗之一中運行,並且產生大量 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()
。 。