Di lingkungan Windows ada API untuk mendapatkan jalur yang menjalankan proses. Apakah ada yang serupa di Unix / Linux?
Atau adakah cara lain untuk melakukannya di lingkungan ini?
Di Linux, symlink /proc/<pid>/exe
memiliki jalur yang dapat dieksekusi. Gunakan perintah readlink -f /proc/<pid>/exe
untuk mendapatkan nilainya.
Di AIX, file ini tidak ada. Anda bisa membandingkan cksum <actual path to binary>
dan cksum /proc/<pid>/object/a.out
.
sudo
jika output kosong, beberapa proses dibuat oleh pengguna sistem lain.Anda dapat menemukan exe dengan mudah dengan cara-cara ini, coba saja sendiri.
ll /proc/<PID>/exe
pwdx <PID>
lsof -p <PID> | grep cwd
sumber
pwdx <PID>
memberi saya lokasi tautan simbolis sehingga saya dapat menemukan log dan menghentikan proses dengan cara yang benar.ll
biasanya adalah alias:alias ll='ls -alF'
.Sedikit terlambat, tetapi semua jawaban khusus untuk linux.
Jika Anda juga membutuhkan unix, maka Anda membutuhkan ini:
DIEDIT: Memperbaiki bug yang dilaporkan oleh Mark lakata.
sumber
"/proc/self/exe"
dengansprintf(foo,"/proc/%d/exe",pid)
Saya menggunakan:
Ganti 786 dengan PID atau nama proses Anda.
sumber
pwdx <process id>
Perintah ini akan mengambil jalur proses dari tempat ia dijalankan.
sumber
Di Linux setiap proses memiliki foldernya sendiri
/proc
. Jadi Anda bisa menggunakangetpid()
pid dari proses yang sedang berjalan dan kemudian menggabungkannya dengan path/proc
untuk mendapatkan folder yang diharapkan Anda butuhkan.Berikut contoh singkat dengan Python:
Inilah contoh di ANSI C juga:
Kompilasi dengan:
sumber
Tidak ada metode "dijamin untuk bekerja di mana saja".
Langkah 1 adalah memeriksa argv [0], jika program dimulai dengan jalur lengkapnya, ini (biasanya) akan memiliki jalur lengkap. Jika itu dimulai oleh jalur relatif, penahanan yang sama (meskipun ini membutuhkan direktori kerja saat ini, menggunakan getcwd ().
Langkah 2, jika tidak ada satu pun dari yang di atas berlaku, adalah mendapatkan nama program, kemudian mendapatkan nama program dari argv [0], kemudian dapatkan PATH pengguna dari lingkungan dan lakukan itu untuk melihat apakah ada yang cocok biner yang dapat dieksekusi dengan nama yang sama.
Perhatikan bahwa argv [0] disetel oleh proses yang menjalankan program, jadi tidak 100% dapat diandalkan.
sumber
terima kasih: Kiwy
dengan AIX:
sumber
Anda juga bisa mendapatkan jalur di GNU / Linux dengan (tidak diuji secara menyeluruh):
Jika Anda ingin direktori yang dapat dieksekusi untuk mungkin mengubah direktori kerja ke direktori proses (untuk media / data / etc), Anda perlu menghapus semuanya setelah / terakhir:
sumber
Perintah di bawah ini mencari nama proses dalam daftar proses yang sedang berjalan, dan mengarahkan perintah pid ke pwdx untuk menemukan lokasi proses.
Gantikan "abc" dengan pola spesifik Anda.
Alternatifnya, jika Anda dapat mengkonfigurasinya sebagai fungsi dalam .bashrc, Anda mungkin merasa berguna untuk menggunakannya jika Anda membutuhkan ini untuk sering digunakan.
Misalnya:
Semoga ini membantu seseorang kapan-kapan .....
sumber
Temukan jalur ke nama proses
sumber
pgrep
); di baris berikutnya ia mendapatkan jalur biner yang sedang dieksekusi (/proc/$PID/exe
adalah symlink ke file yang dapat dieksekusi); dan akhirnya symlink itu menggemakan.