जवाबों:
3 तरीके हैं जिनसे मैं अवगत हूं:
$ pwdx <PID>
$ lsof -p <PID> | grep cwd
$ readlink -e /proc/<PID>/cwd
कहो कि हमारे पास यह प्रक्रिया है।
$ pgrep nautilus
12136
यदि हम उपयोग करते हैं तो pwdx
:
$ pwdx 12136
12136: /home/saml
या आप उपयोग कर सकते हैं lsof
:
$ lsof -p 12136 | grep cwd
nautilus 12136 saml cwd DIR 253,2 32768 10354689 /home/saml
या आप में सीधे प्रहार कर सकते हैं /proc
:
$ readlink -e /proc/12136/cwd/
/home/saml
/proc
।
pwdx
मेरे लिये कार्य करता है।
pgrep <process-name>
मैं मानता हूं कि आपके पास प्रक्रिया आईडी है pid
। अधिकांश प्रणालियों के अधिकांश तरीकों की आवश्यकता होगी कि आप जिस शेल से यह कर रहे हैं वह उसी उपयोगकर्ता के रूप में लक्ष्य प्रक्रिया (या रूट) के रूप में चल रहा है।
लिनक्स और सोलारिस पर और शायद कुछ अन्य सिस्टम V यूनियनों में:
cd /proc/$pid/cwd && pwd
लिनक्स पर (एम्बेडेड सिस्टम को छोड़कर जहां readlink
उपलब्ध नहीं है) लेकिन सोलारिस नहीं:
readlink /proc/$pid/cwd
किसी भी यूनिक्स संस्करण के बारे में, आप उपयोग कर सकते हैं lsof
। खबरदार कि अगर कोई नई रेखा है, तो इसे मुद्रित किया जाएगा \n
(बैकस्लैश से अप्रभेद्य n
)। यदि आप भाग्यशाली महसूस करते हैं, तो आप दूसरे रूप का उपयोग कर सकते हैं, जो चुपचाप निर्देशिका नाम के सभी व्हाट्सएप पर चुटकी लेते हैं।
lsof -a -Fn -p $pid -d cwd | sed -e '1d' -e '2s/^n/'
lsof -p $pid | awk '$4=="cwd" {print $9}'
बोनस: यदि आपको इसकी वर्तमान निर्देशिका को बदलने के लिए एक प्रक्रिया का कारण बनने की आवश्यकता है, तो आप इसे डिबगर के साथ कर सकते हैं। यह उदाहरण के लिए एक लंबे समय से चल रहे प्रोग्राम को स्थानांतरित करने के लिए उपयोगी है जो अपनी वर्तमान निर्देशिका के बारे में परवाह नहीं करता है जिसे आप निकालना चाहते हैं। सभी कार्यक्रम अपने पैरों के नीचे अपनी वर्तमान निर्देशिका को बदलने की सराहना नहीं करते हैं - उदाहरण के लिए एक शेल क्रैश होने की संभावना है।
#!/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
अन्य यूनिक्स पर सर्वव्यापीता पर टिप्पणी कर सकते हैं ?
pwdx
20 वीं सदी के बाद से सोलारिस पर मौजूद है, 2000 के दशक के मध्य से लिनक्स (सोलारिस की नकल करते हुए, मैन पेज कहता है)। किसी अन्य यूनिक्स AFAIK पर मौजूद नहीं।
pwdx
वहाँ भी है ?
आधारित @ उत्तर उत्तर ..
यदि आप मैक ओएसएक्स और लिनक्स उपयोग के लिए अपनी प्रक्रिया की पीआईडी जानते हैं:
lsof -p PID | awk '$4=="cwd" {print $9}'
प्रक्रिया की काम कर पाने के लिए ..