Ich habe eine lang laufende bash
Instanz (innerhalb einer screen
Sitzung), die einen komplexen Satz von Befehlen innerhalb einer Schleife ausführt (wobei jede Schleife Pipes, Weiterleitungen usw. ausführt).
Die lange Befehlszeile wurde im Terminal geschrieben - sie befindet sich nicht in einem Skript. Jetzt kenne ich die Bash-Prozess-ID und habe Root-Zugriff. Wie kann ich sehen, wie genau die Befehlszeile darin ausgeführt wird bash
?
bash$ echo $$
1234
bash$ while true ; do \
someThing | somethingElse 2>/foo/bar | \
yetAnother ; sleep 600 ; done
Und in einer anderen Shell-Instanz möchte ich die Befehlszeile sehen, die in PID 1234 ausgeführt wird:
bash$ echo $$
5678
bash$ su -
sh# cd /proc/1234
sh# # Do something here that will display the string \
'while true ; do someThing | somethingElse 2>/foo/bar | \
yetAnother ; sleep 600 ; done'
Ist das möglich?
EDIT # 1
Hinzufügen von Gegenbeispielen für einige Antworten, die ich habe.
Über die Verwendung des
cmdline
Under/proc/PID
: Das funktioniert nicht, zumindest nicht in meinem Szenario. Hier ist ein einfaches Beispiel:$ echo $$ 8909 $ while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
In einer anderen Shell:
$ cat /proc/8909/cmdline bash
Verwenden
ps -p PID --noheaders -o cmd
ist genauso nutzlos:$ ps -p 8909 --no-headers -o cmd bash
ps -eaf
ist auch nicht hilfreich:$ ps -eaf | grep 8909 ttsiod 8909 8905 0 10:09 pts/0 00:00:00 bash ttsiod 30697 8909 0 10:22 pts/0 00:00:00 sleep 30 ttsiod 31292 13928 0 10:23 pts/12 00:00:00 grep --color=auto 8909
Das heißt, es gibt keine Ausgabe der ORIGINAL - Befehlszeile, nach der ich suche - dh nach der
while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
.