Sie haben es bereits als Kommentar gepostet, dies sollte Ihren Wünschen entsprechen:
ps -ef | grep "$(ls)"
Ich möchte den Prozessstatus für alle Dienste abrufen, die in einem bestimmten Verzeichnis ausgeführt werden. Im Moment kann ich eins nach dem anderen überprüfen ps -ef | grep ServiceName
. Aber gibt es einen Weg zum ls
Verzeichnis und zu ps
jedem Dienst?
So etwas ps -ef | grep < ls
?
Sie haben es bereits als Kommentar gepostet, dies sollte Ihren Wünschen entsprechen:
ps -ef | grep "$(ls)"
In Bash:
ps -ef | grep "$(ls)"
(Dieselbe Zeile erschien in incBrain's Kommentar, während ich den Rest meiner Antwort in Debian / Bash komponierte und testete.)
Wenn das Muster in der ps
Ausgabe als Befehlszeilenargument (nicht als Befehl) oder als Teil des Befehls angezeigt wird, wird Abfall erzeugt . Um dies zu reduzieren, würde ich find
anstelle von ls
den vollständigen Pfad verwenden:
ps -ef | grep -f <(find -L "$(pwd)" -maxdepth 1 -type f)
Trotzdem kann es zu unerwünschten zusätzlichen Ausgaben kommen.
Beachten Sie, dass dies nicht der Fall ist
Dienste, die in einem bestimmten Verzeichnis ausgeführt werden
Vielmehr verarbeitet er mit ausführbaren Dateien in einem bestimmten Verzeichnis .
Um das aktuelle Arbeitsverzeichnis eines Prozesses mitzuteilen, lesen Sie möglicherweise /proc/<PID>/cwd
. Das nächste Beispiel ist eine (schnelle und schmutzige) ps
Alternative, die zeigt, dass Sie Informationen /proc
in einem gewünschten Formular extrahieren können :
sudo bash -c 'for i in /proc/[1-9]* ; do PID=$(basename "$i"); E=$(readlink "$/exe"); D=$(readlink "$/cwd"); echo -e "PID=$\tEXE=$\tCWD=$" ; done | grep "CWD=$(pwd)$"'
Sie müssen sudo
Zugriff auf alle Prozesse erhalten. Wenn dies nicht erforderlich ist und Sie es als normaler Benutzer ausführen möchten, reicht der Teil innerhalb der '
Trennzeichen aus.
Vielleicht so etwas:
processes="$(ps -ef)" for file in *;do grep "$file" <<<"$processes" done