Çalışan bir sürecin mutlak yolunu nasıl bilebilirim?


93

Diskte aynı uygulamanın birden fazla kopyası varsa ve görebildiğim kadarıyla yalnızca biri çalışıyorsa, onu diğerlerinden ayırmanın mutlak yolunu psnasıl bilebilirim ?

Yanıtlar:


110
% sudo ls -l /proc/PID/exe

Örneğin:

% ps -auxwe | grep 24466
kök 24466 0.0 0.0 1476 280? S 2009 0:00 denetle sshd
% sudo ls - l / proc / 24466 / exe
lrwxrwxrwx 1 kök kökü 0 Şub 1 18:05 / proc / 24466 / exe -> /package/admin/daemontools-0.76/command/supervise

1
Sistemimde (ubuntu 14.04) lskomutu çalıştırmak için süper kullanıcı olmanıza gerek yok .
Jarno

3
@ jarno ls: cannot read symbolic link /proc/28783/exe: Permission denied- bu lskomutu çalıştırmakla ilgili değil, size ait olmayan bir işlemin işlem bilgisine erişmekle ilgili. Kutumda / proc'ta listelenen tüm işlemlerin yaklaşık% 97'si kök işlemlerdir ve diğerleri 11 farklı kullanıcıya dağılmıştır.
Marfy

20

kullanın:

pwdx $pid

Bu size mutlak yolu değil, mevcut iş akdinin dizinini verir.

Genellikle whichkomut size hangisinin kabuktan çağrıldığını söyler:

#> which vlc
/usr/bin/vlc

3
bu cevabın daha fazla oy alması gerekiyor ..
Kokizzu

8
@Kokizzu Hayır, soruyu hiç cevaplamadığı için değil. Hangi komut, yalnızca komutu şimdi uygularsanız hangi ikili dosyanın çalıştırılacağını gösterir. Soru “hangi ikili zaten orada çalışıyor” idi. Örneğin, bilgisayarınızda bir düzine jdk olduğunu düşünün. Hangi jdk'nin alındığı, bu konuda size yardımcı olmayan çalışan bir java işlemi hakkında bilgi edinmek istiyorsanız. Eğer şimdi çalıştırırsanız, sadece hangi jdk'nin alınacağını size söyleyecektir. Kabul edilen cevap da doğru cevap.
noamik

Bu cevabın açık bir yolu yanlış: makinemde farklı JDK sürümleri ve bazı 32 bit / 64 bit sürümleriyle işlemler yürütüyorum. İşlem için doğru jstack / jmap versiyonunu tanımlamak istersem, yukarıdaki cevap kabul edilirken cevap vermeyecektir.
Daniel Da Cunha

@Kokizzu Bu, yalnızca "Sürecin şu andaki çalışma dizini $pidnedir?" Sorusunu yanıtlar. Düzenlenen yayın hala soruyu cevaplamıyor. whichSadece "Eğer komut yolda ise, o zaman nedir?"
John Strood

pwdxBana redhat x64 6.3 üzerindeki pid'e bağlı olarak, sürecin ayrılabilir programının mutlak yolunu geri döndür.
Nick Dong,

14

Tek yönlü ps -ef


5
belirli bir hizmet için çalışmadı, sadece göreceli yolu sağladı
Jader Dias

Başladığı komutla bir süreci tanımlamama yardımcı oldu.
JPI


2

Hızlı cevap, psseçeneklerle veya /procdosya sistemi bilgileriyle kullanmaktır. Bu genellikle işe yarar, ancak garanti edilmez. Genel olarak kesin ve garantili bir cevap yoktur. Örneğin, yürütme dosyası yürütme sırasında silinirse, dosyanın yolu kalmayacaksa?

Daha fazla ayrıntı için Unix SSS bölümüne bakın , özellikle de 4.3 ve 4.4 numaralı sorular.


2

Neden herkes sizden PID'yi bilmenizi bekliyor? İşte insan dostu yol:

pwdx `pgrep ###process_name###`

Soru, “görebildiğim gibi ps”, bu yüzden muhtemelen PID'yi gösterecek
Scz

Ah tamam doğru. Bunu hala birçok kullanım durumumda daha hızlı bir astar olarak buluyorum.
moodboom

1

lsof bir seçenek. Aşağıdaki gibi bir şey deneyebilirsiniz:

lsof -p PROCESS_ID

Bu, çalıştırılabilir dosyanın gerçek konumu dahil olmak üzere işlem tarafından açılan tüm dosyaları listeler. Ardından aradığınız bilgiyi bulmak için birkaç tane daha awk, cut, grep vb. Eklemek mümkündür.

Örnek olarak, 'java' işlemimin nereden geldiğini belirlemek için aşağıdaki komutları uyguladım:

lsof -p 12345 | awk '{print $ NF}' | grep 'java $'


Bu, daha önce cevaplanmış cevaplardan tam olarak nasıl farklı?
Pezevenk Suyu,

0

Kullanabilirsin

readlink /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe

veya

find /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe -printf "%l\n"

mutlak yol almak için. PID işlemidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.