Belirli bir dizinde çalışan tüm hizmetler için işlem durumunu almak istiyorum. Şimdi tek tek kontrol edebilirim ps -ef | grep ServiceName
. Fakat ls
dizine ve ps
her hizmete giden bir yol var mı?
Gibi bir şey ps -ef | grep < ls
?
Belirli bir dizinde çalışan tüm hizmetler için işlem durumunu almak istiyorum. Şimdi tek tek kontrol edebilirim ps -ef | grep ServiceName
. Fakat ls
dizine ve ps
her hizmete giden bir yol var mı?
Gibi bir şey ps -ef | grep < ls
?
Yanıtlar:
Bash'te:
ps -ef | grep "$(ls)"
(Aynı satır incBrain'in yorumunda, cevabımın geri kalanını Debian / Bash'te oluştururken ve test ederken ortaya çıktı.)
Desen ps
çıktıda komut satırı argümanı (komut değil) veya komutun bir parçası olarak görünüyorsa, çöp oluşturur . Bunu azaltmak için tam yol almak find
yerine kullanırım ls
:
ps -ef | grep -f <(find -L "$(pwd)" -maxdepth 1 -type f)
Yine de bazı istenmeyen ekstra çıkışlar olabilir.
Bunların olmadığını unutmayın
Verilen bir dizinde çalışan servisler
yerine verilen bir dizindeki yürütülebilir dosyalar ile işlem yapar .
Bir işlemin geçerli çalışma dizinini anlatmak için okuyabilirsiniz /proc/<PID>/cwd
. Bir sonraki örnek (hızlı ve kirli) bir ps
alternatiftir ve bilgileri istediğiniz biçimde alabileceğinizi gösterir /proc
:
sudo bash -c 'for i in /proc/[1-9]* ; do PID=$(basename "$i"); E=$(readlink "${i}/exe"); D=$(readlink "${i}/cwd"); echo -e "PID=${PID}\tEXE=${E}\tCWD=${D}" ; done | grep "CWD=$(pwd)$"'
İhtiyacınız sudo
tüm süreçlerde erişmek için. Bu gerekli değilse ve normal kullanıcı olarak çalıştırmak istiyorsanız, '
sınırlayıcılar içindeki kısım yeterlidir.
ps -ef | grep "$(ls)"
?