Ich musste das kürzlich tun. Beim Stapelüberlauf antwortete ich, wie die PID des im Bildschirm ausgeführten Prozesses ermittelt werden kann . Sobald Sie die PID haben, können ps
Sie den Befehl abrufen. Hier ist der Inhalt dieser Antwort mit einigen zusätzlichen Inhalten, um Ihre Situation anzugehen:
Sie können die PID der Bildschirmsitzungen hier wie folgt abrufen:
$ screen -ls
There are screens on:
1934.foo_Server (01/25/15 15:26:01) (Detached)
1876.foo_Webserver (01/25/15 15:25:37) (Detached)
1814.foo_Monitor (01/25/15 15:25:13) (Detached)
3 Sockets in /var/run/screen/S-ubuntu.
Angenommen, Sie möchten, dass die PID des Programms in der foo_Monitor
Bildschirmsitzung in Bash ausgeführt wird . Verwenden Sie die PID der foo_Monitor
Bildschirmsitzung, um die PID der darin ausgeführten bash
Sitzung zu ermitteln, indem Sie die PPIDs (übergeordnete PID) nach der bekannten PID durchsuchen:
$ ps -el | grep 1814 | grep bash
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 1815 1814 0 80 0 - 5520 wait pts/1 00:00:00 bash
Holen Sie sich jetzt nur die PID der bash
Sitzung:
$ ps -el | grep 1814 | grep bash | awk '{print $4}'
1815
Jetzt wollen wir den Prozess mit dieser PID. Verschachteln Sie einfach die Befehle und verwenden Sie diesmal das -v
Flag grep bash
, um den Prozess zu erhalten, der nicht bash ist:
$ echo $(ps -el | grep $(ps -el | grep 1814 | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')
23869
Wir können diese PID verwenden, um den Befehl zu finden (siehe Ende der zweiten Zeile):
$ ps u -p 23869
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
dotanco+ 18345 12.1 20.1 5258484 3307860 ? Sl Feb02 1147:09 /usr/lib/foo
Alles zusammen:
$ ps u -p $(ps -el | grep $(ps -el | grep SCREEN_SESSION_PID | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')