Linux - Cari tahu direktori kerja saat ini dari suatu proses?

11

Jika saya memiliki proses PID X, bagaimana saya bisa mengetahui direktori apa yang sedang berjalan? Saya bisa melihat dengan ps aux | grep Xbaris perintah penuh yang dipanggil. Namun dalam hal ini ./script.sh, dan saya ingin melihat yang script.shsedang berjalan.

Rory
sumber

Jawaban:

11

Masalahnya /proc/PID/exeadalah, untuk skrip shell, ini menunjukkan lokasi shell. Masalahnya /proc/PID/cwdadalah yang menunjukkan direktori kerja saat ini dari proses. Jika proses mengubah direktori, itu tercermin dalam target symlink itu.

Ini akan menunjukkan apa $ PWD pada saat skrip dimulai (gantikan ID proses yang Anda minati di mana Anda melihat "PID"):

procdir=$(grep -az "\bPWD" /proc/PID/environ); echo $procdir

atau hanya:

grep -az "\bPWD" /proc/PID/environ

Ini akan menampilkan perintah yang memulainya sehingga Anda dapat melihat apakah direktori relatif atau absolut digunakan:

proccmd=$(grep -az PROC_NAME /proc/PID/cmdline); echo $proccmd

atau hanya:

grep -az PROC_NAME /proc/PID/cmdline

Bersama-sama, ini akan menunjukkan kepada Anda skrip mana yang sedang dijalankan. Untuk satu dimulai dengan ./semua yang Anda butuhkan adalah procdir.

Dijeda sampai pemberitahuan lebih lanjut.
sumber
pwdx lebih baik dari ini.
Bjorn
8

Ada jawaban yang lebih sederhana, dan itu untuk digunakan pwdx, seperti yang dijelaskan di sini

Markus Jevring
sumber
Ini jawaban yang lebih baik.
Bjorn