Apakah mungkin menemukan jalur program yang sedang berjalan?


17

Saya memiliki xmms2dproses yang berjalan, tetapi dua kemungkinan file yang dapat dieksekusi (di direktori yang berbeda, keduanya di jalur yang dapat dieksekusi) yang bisa memunculkannya. Saya curiga salah satunya rusak, karena terkadang program ini berfungsi dan terkadang tidak. Proses yang berjalan sekarang berfungsi, jadi saya ingin menghapus (atau mengganti nama) yang lain.

ps ax|grep "xmms"kembali 8505 ? SLl 2:38 xmms2d -vtanpa informasi jalur. Mengingat PID, dapatkah saya menemukan apakah itu dijalankan dari /usr/bin/xmms2datau /usr/local/bin/xmms2d?

Terima kasih!


2
ps -C xmmsharus membuat grep Anda usang.
pengguna tidak dikenal

1
pgrep akan melakukannya juga.
jlliagre

Jawaban:


22

Coba ini:

ls -l /proc/8505/exe

Atau jika Anda tidak ingin menguraikan output ls, cukup lakukan:

readlink /proc/8505/exe

atau

realpath /proc/8505/exe

6

Jika Anda menjalankan Solaris, caranya sedikit berbeda dari Linux yang disarankan:

$ 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

Jika Anda ingin mengetahui direktori kerja saat ini dari proses yang sedang berjalan, Anda dapat menggunakan:

pwdx $(pgrep xmms)

misalnya:

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

(menghapus komentar saya karena tidak lagi diterapkan setelah edit Anda :)
Kjetil Jorgensen

-1

Saya memulai mousepad dari shell:

mousepad & 
[1] 24289

periksa, dari mana asalnya:

which mousepad 
   /usr/bin/mousepad

mulai dengan jalur:

/usr/bin/mousepad &

lihat via ps:

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

Seperti yang kita lihat, yang dipanggil tanpa path ditampilkan tanpa path, dan dimulai dengan PATH, dan karenanya dapat ditemukan oleh

which mousepad

Sesederhana itu, bukan? Tunggu! Bagaimana jika saya memulai mousepad dari menu? Yah, itu mungkin ditentukan dengan atau tanpa menggunakan pengaturan PATH. Saya mencoba. Awal yang normal mengarah ke 'mousepad' sederhana dips v -C . Karena ~ / bin adalah bagian pertama dari PATH saya, saya membuat boneka di sana, dan, voila, boneka itu dimulai dari menu.

Tetapi bagaimana jika Anda memulai program yang menghapus dirinya sendiri? Yang tidak akan menemukan program yang dihapus dan melaporkan yang salah, jika ada yang kedua di jalan.

Jadi itu kondisi lomba. Jika Anda tahu bahwa program Anda tidak menghapus diri mereka sendiri atau tidak dipindahkan saat Anda sedang menyelidiki lokasi mereka, ps v -C NAMEdan which NAMEseharusnya berfungsi dengan cukup baik.


Apakah ini akan selalu berhasil? Misalkan saya memiliki executable di dua direktori yang berbeda dan saya jalankan ./someexecutabledi keduanya?
apoorv020

Tidak, tentu saja tidak, karena keduanya akan ditampilkan sebagai ./someexecutable atau / bin / bash ./someexecutable
pengguna tidak dikenal

-4

Maju dan hapus kedua file (tanpa opsi paksa -f). File yang dihapus adalah file yang tidak berjalan !!

Penguncian file yang dapat dieksekusi sistem tidak akan memungkinkan Anda untuk menghapus file apa pun yang sedang dieksekusi.


Jawaban Anda tidak memberikan jawaban nyata untuk pertanyaan itu.
Risto Salminen

4
Itu juga salah. Anda dapat menghapus executable yang berjalan tanpa masalah. Bagaimana menurut Anda paket seperti init, yang selalu berjalan, ditingkatkan? Anda tidak dapat mengubah eksekusi yang dapat dijalankan.
Patrick

1
Ini sangat salah - jangan lakukan ini
Michael Mrozek
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.