
約 50 個の gnu screen ウィンドウのうち、どのウィンドウで特定の変数が定義されたプロセスが実行されているかを調べたいと思います。たとえば、約 1 週間前に、次の操作を実行しました。
id=ABC123456; ~/run_long_process $id
これは私の約 50 個の gnu screen ウィンドウの 1 つで実行されており、大量の 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()
使用される呼び出しの種類によって異なります)。そのため、おそらくタスクの環境もスヌープして、同じ結果を見つけることができます。