Yanıtlar:
Farkında olduğum 3 yöntem var:
$ pwdx <PID>
$ lsof -p <PID> | grep cwd
$ readlink -e /proc/<PID>/cwd
Diyelim ki bu süreç bizde.
$ pgrep nautilus
12136
O zaman kullanırsak pwdx
:
$ pwdx 12136
12136: /home/saml
Veya kullanabilirsiniz lsof
:
$ lsof -p 12136 | grep cwd
nautilus 12136 saml cwd DIR 253,2 32768 10354689 /home/saml
Veya doğrudan içine sokabilirsiniz /proc
:
$ readlink -e /proc/12136/cwd/
/home/saml
/proc
.
pwdx
benim için çalışıyor.
pgrep <process-name>
İşlem kimliğinin sizde olduğunu varsayıyorum pid
. Çoğu sistemdeki çoğu yöntem, bunu yaptığınız kabuğun hedef işlem (veya kök) ile aynı kullanıcı olarak çalışmasını gerektirir.
Linux ve Solaris ve belki de bazı diğer System V unices'de:
cd /proc/$pid/cwd && pwd
Linux'ta ( readlink
mevcut olmayan gömülü sistemler hariç ) ancak Solaris'te:
readlink /proc/$pid/cwd
Hemen hemen tüm Unix varyantlarında kullanabilirsiniz lsof
. Yeni bir satır varsa, bunun \n
arkasından (ters eğik çizgiden ayırt edilemez) basılacağına dikkat edin n
. Kendinizi şanslı hissediyorsanız, dizin adındaki tüm boşluklarda sessizce boğulan ikinci formu kullanabilirsiniz.
lsof -a -Fn -p $pid -d cwd | sed -e '1d' -e '2s/^n/'
lsof -p $pid | awk '$4=="cwd" {print $9}'
Bonus: Mevcut dizini değiştirmek için bir işlem yapmanız gerekiyorsa, bunu bir hata ayıklayıcı ile yapabilirsiniz. Bu, örneğin mevcut diziniyle ilgilenmeyen uzun süren bir programı kaldırmak istediğiniz dizinden çıkarmak için kullanışlıdır. Tüm programlar mevcut dizinin ayaklarının altında değiştiğini takdir etmez - örneğin bir kabuğun çökmesi olasıdır.
#!/bin/sh
# Use gdb to change the working directory of a process from outside.
# This could be generalized to a lot of other things.
if [ $# -ne 2 ]; then
echo 1>&2 "Usage: $0 PID DIR"
exit 120
fi
case "$1" in
*[!0-9]*) echo 1>&2 "Invalid pid \`$1'"; exit 3;;
esac
case "$2" in
*[\\\"]*)
echo 1>&2 "Unsupported character in directory name, sorry."
exit 3;;
esac
gdb -n -pid "$1" -batch -x /dev/stdin <<EOF
call chdir("$2")
detach
quit
EOF
pwdx
Diğer Unix'lerin her yerde bulunup bulunmadığı hakkında yorum yapabilir misiniz ?
pwdx
20. yüzyıldan bu yana Solaris üzerinde mevcut olduğu, Linux 2000'li yılların ortalarından itibaren (Solaris taklit manuel sayfa). Diğer unix AFAIK'lerde yoktur.
pwdx
orada mı?
@Gilles cevabı dayanarak ..
Prosesinizin PID'sini biliyorsanız .. Mac OSX ve Linux kullanımı için:
lsof -p PID | awk '$4=="cwd" {print $9}'
işlemin direktörlüğünü yapmak için ..