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 lsdizine ve psher 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 lsdizine ve psher 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 findyerine 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 psalternatiftir 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 sudotü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)"?