
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 screen
eine WINDOW
Variable 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.