GNU-Bildschirm: Finden Sie heraus, in welchem ​​Bildschirmfenster ein bestimmter laufender Prozess oder eine bestimmte Variable vorliegt.

GNU-Bildschirm: Finden Sie heraus, in welchem ​​Bildschirmfenster ein bestimmter laufender Prozess oder eine bestimmte Variable vorliegt.

Ich möchte herausfinden, in welchem ​​meiner ca. 50 GNU-Bildschirmfenster ein Prozess ausgeführt wird, in dem eine bestimmte Variable definiert ist. Vor etwa einer Woche habe ich beispielsweise Folgendes gemacht:

id=ABC123456; ~/run_long_process $id

Dies läuft in einem meiner ca. 50 GNU-Bildschirmfenster und erzeugt eine Menge STDOUT/STDERR, aber gibt es eine Möglichkeit, herauszufinden, welches es ist, außer in jedem Fenster zurückzuscrollen oder Strg+Z zu drücken und jedes Fenster fortzusetzen? Irgendwelche Vorschläge?

Antwort1

Wenn es sich um Linux handelt, können Sie einem Prozess wie diesem folgen. Als Beispiel für einen „lang laufenden Prozess“ verwende ich „perl -e sleep“, der einfach für immer schläft:

$ id=ABC123456; perl -e sleep $id

Jetzt müssen wir den laufenden Prozess finden:

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

Da wir nun die PID des übergeordneten Elements haben, können wir in dessen Umgebung herumschnüffeln und screeneine WINDOWVariable festlegen:

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

Das ist richtig. Ich habe es im Bildschirmfenster 3 ausgeführt. Da es sich um eine Umgebungsvariable handelt, besteht eine gute Chance, dass Ihre Aufgabe sie auch erbt (je nachdem, welche Art von exec()Aufrufen verwendet wird). Sie können also wahrscheinlich auch die Umgebung Ihrer Aufgabe ausspionieren und das gleiche Ergebnis finden.

verwandte Informationen