Çalışan bir programın yolunu bulmak mümkün müdür?


17

xmms2dÇalışan bir işlem var , ancak iki farklı yürütülebilir dosya (farklı dizinlerde, her iki çalıştırılabilir yolda) ortaya çıkardı. Bunlardan birinin bozuk olduğundan şüpheleniyorum, çünkü bazen bu program çalışıyor ve bazen çalışmıyor. Çalışan işlem şimdi çalışıyor, bu yüzden diğerini silmek (veya yeniden adlandırmak) istiyorum.

ps ax|grep "xmms"8505 ? SLl 2:38 xmms2d -vyol bilgisi olmadan döner . PID göz önüne alındığında, /usr/bin/xmms2dveya çalıştırıldı olup olmadığını bulabilir miyim /usr/local/bin/xmms2d?

Teşekkürler!


2
ps -C xmmsgrep'inizi eskimiş yapmalısınız.
kullanıcı bilinmiyor

1
pgrep de yapardı.
jlliagre

Yanıtlar:


22

Bunu dene:

ls -l /proc/8505/exe

Veya çıktısını ayrıştırmak istemiyorsanız şunları yapın ls:

readlink /proc/8505/exe

veya

realpath /proc/8505/exe

6

Solaris çalıştırıyorsanız, önerilen Linux'tan biraz farklıdır:

$ for i in $(pgrep bash)
do
  printf "%6d %s\n" $i $(readlink /proc/$i/path/a.out)
done
   577 /usr/bin/bash
 11247 /usr/bin/bash
 13921 /usr/bin/bash
 13992 /tmp/bash

Çalışan işlemlerin geçerli çalışma dizinini bilmek istiyorsanız, şunları kullanabilirsiniz:

pwdx $(pgrep xmms)

Örneğin:

$ pwdx $(pgrep ksh)
2904: /home/jlliagre
2906: /home/jlliagre
3844: /tmp

(düzenlemenizden sonra artık uygulanmadığı için
yorumumu

-1

Mousepad kabuktan başlıyorum:

mousepad & 
[1] 24289

nereden geldiğini kontrol edin:

which mousepad 
   /usr/bin/mousepad

yolu ile başlat:

/usr/bin/mousepad &

ps ile bakmak:

ps v -C mousepad 
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
24289 pts/3    S      0:00      3    62 85441 10964  1.0 mousepad
24292 pts/3    S      0:00      0    62 85433 10864  1.0 /usr/bin/mousepad

Gördüğümüz gibi, yolsuz olarak çağrılan yol yolsuz olarak görüntülenir ve PATH ile başlar ve bu nedenle

which mousepad

Bu kadar basit, değil mi? Bekle! Mousepad'i menüden başlatırsam ne olur? Peki, PATH ayarları kullanılarak veya kullanılmadan belirtilebilir. Denedim. Normal bir başlangıç, basit bir 'fare altlığı' sağlar ps v -C. ~ / Bin PATH'ımın ilk kısmı olduğu için orada bir kukla oluşturuyorum ve voila, kukla menüden başlatılır.

Peki ya kendini silen bir program başlatırsanız? Yolda bir saniye varsa, silinen programı bulamaz ve yanlış bir programı bildirmez.

Yani bu bir yarış koşulu. Konumlarını araştırırken programlarınızın kendilerini silmediğini veya taşınmadığını biliyorsanız ps v -C NAMEve which NAMEoldukça iyi çalışmalıdır.


Bu her zaman işe yarar mı? İki farklı dizinde çalıştırılabilir var ./someexecutableve her ikisinde de çalıştığımı varsayalım ?
apoorv020

Hayır, elbette hayır, çünkü her ikisi de ./someexecutable veya / bin / bash ./someexecutable olarak bilinir
kullanıcı bilinmiyor 13:

-4

Devam edin ve her iki dosyayı da silin (force -f seçeneği olmadan). Silinen dosya, çalışmayan !!

Sistem yürütülebilir dosya kilitleme, yürütülmekte olan hiçbir dosyayı silmenize izin vermez.


Cevabınız soruya gerçek bir cevap vermiyor.
Risto Salminen

4
Aynı zamanda yanlış. Çalışan çalıştırılabilir dosyaları sorunsuz bir şekilde silebilirsiniz. initHer zaman çalışan paketler nasıl yükseltilir? Sen olamaz değiştirmek çalışan yürütülebilir.
Patrick

1
Bu endişe verici bir şekilde yanlış - bunu yapma
Michael Mrozek
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.