Bagaimana saya bisa tahu jalur absolut dari proses yang sedang berjalan?


93

Jika saya memiliki banyak salinan dari aplikasi yang sama pada disk, dan hanya satu yang berjalan, seperti yang saya lihat ps, bagaimana saya bisa mengetahui jalur absolut untuk membedakannya dari yang lain?

Jawaban:


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

misalnya:

% ps -auxwe | grep 24466
root 24466 0.0 0.0 1476 280? S 2009 0:00 mengawasi sshd
% sudo ls -l / proc / 24466 / exe
lrwxrwxrwx 1 root root 0 Feb 1 18:05 / proc / 24466 / exe -> /package/admin/daemontools-0.76/command/supervise

1
Di sistem saya (ubuntu 14.04) Anda tidak perlu menjadi superuser untuk menjalankan lsperintah.
jarno

3
@jarno ls: cannot read symbolic link /proc/28783/exe: Permission denied- ini bukan tentang menjalankan lsperintah, ini tentang mengakses info proses dari proses yang bukan milik Anda. Di kotak saya, sekitar 97% dari semua proses yang terdaftar di / proc adalah proses root, dan yang lainnya didistribusikan lebih dari 11 pengguna yang berbeda.
Irfy

20

Menggunakan:

pwdx $pid

Ini memberi Anda direktori kerja pid saat ini, bukan jalur absolutnya.

Biasanya whichperintah akan memberi tahu Anda yang sedang dipanggil dari shell:

#> which vlc
/usr/bin/vlc

3
jawaban ini perlu lebih banyak upvote ..
Kokizzu

8
@Kokizzu Tidak, tidak karena itu tidak menjawab pertanyaan sama sekali. Perintah mana yang hanya memberi tahu Anda biner mana yang akan dijalankan jika Anda menjalankan perintah sekarang. Pertanyaannya adalah "biner mana yang sudah berjalan di sana". Bayangkan misalnya memiliki selusin jdks di komputer Anda. Jika Anda ingin tahu untuk menjalankan proses java dari mana jdk itu diambil, yang tidak membantu Anda dengan itu. Ini hanya akan memberi tahu Anda dari mana jdk itu akan diambil, jika Anda menjalankannya sekarang. Jawaban yang diterima juga yang benar.
noamik

Cara yang jelas jawaban ini salah: pada mesin saya, saya menjalankan proses dengan versi JDK yang berbeda dan beberapa 32bits / 64bits. Jika saya ingin mengidentifikasi versi jstack / jmap yang benar untuk proses, jawaban di atas tidak akan berfungsi sementara jawaban yang diterima akan.
Daniel Da Cunha

@Kokizzu Ini hanya menjawab pertanyaan, "Apa direktori kerja saat ini dari proses $pid?" Posting yang diedit masih belum menjawab pertanyaan. whichhanya mengatakan "Jika perintah ada di jalan, lalu apa itu?"
John Strood

pwdxkembalikan saya jalur absolut dari program exectuable dari proses tergantung pada pid pada redhat x64 6.3.
Nick Dong

14

Salah satu caranya adalah ps -ef


5
tidak bekerja untuk layanan tertentu, itu hanya menyediakan jalur relatif
Jader Dias

Membantu saya mengidentifikasi proses melalui perintah yang dimulai.
jpierson


2

Jawaban cepatnya adalah menggunakan psopsi atau /procinfo sistem file. Itu biasanya akan berhasil, tetapi tidak dijamin. Secara umum, tidak ada jawaban pasti dan pasti. Misalnya, bagaimana jika file yang dieksekusi dihapus selama eksekusi, sehingga tidak ada jalur ke file?

Lihat FAQ Unix untuk sedikit lebih detail, terutama pertanyaan 4.3 dan 4.4.


2

Mengapa semua orang mengharapkan Anda mengetahui PID? Inilah cara yang ramah manusia:

pwdx `pgrep ###process_name###`

Pertanyaannya menyatakan "seperti yang saya lihat ps", sehingga mungkin akan menampilkan PID
Scz

Ah ok benar. Saya masih menemukan ini menjadi lebih cepat dalam banyak kasus penggunaan saya.
moodboom

1

lsof adalah pilihan. Anda dapat mencoba sesuatu seperti di bawah ini:

lsof -p PROCESS_ID

Ini akan mendaftar semua file yang dibuka oleh proses termasuk lokasi aktual yang dapat dieksekusi. Maka dimungkinkan untuk menambahkan beberapa awk, cut, grep dll. Untuk mengetahui informasi yang Anda cari.

Sebagai contoh, saya menjalankan perintah berikut untuk mengidentifikasi dari mana proses 'java' saya berasal:

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


Bagaimana ini berbeda dari jawaban yang sudah diposting sebenarnya?
Pimp Juice,

0

Anda bisa menggunakannya

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

atau

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

untuk mendapatkan jalur absolut. PID adalah prosesnya.

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.