উত্তর:
এখানে 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
। বেশিরভাগ সিস্টেমে বেশিরভাগ পদ্ধতির প্রয়োজন হয় যে আপনি যে শেলটিটি করছেন সেটি লক্ষ্য প্রক্রিয়া (বা মূল) হিসাবে একই ব্যবহারকারীর মতো চলছে।
লিনাক্স এবং সোলারিস এবং সম্ভবত কিছু অন্যান্য সিস্টেম ভি সংযুক্তিতে:
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-এর দশকের মাঝামাঝি থেকে (সোলারিসের অনুকরণ করে ম্যান পৃষ্ঠাটি বলেছেন)। অন্য কোনও ইউনিক্স এএফাইক-তে উপস্থিত নেই।
pwdx
আছে?
ভিত্তিক @ গিলস উত্তর ..
যদি আপনি আপনার প্রক্রিয়াটির পিআইডি জানেন .. ম্যাক ওএসএক্স এবং লিনাক্স ব্যবহারের জন্য:
lsof -p PID | awk '$4=="cwd" {print $9}'
প্রক্রিয়া dir পেতে ..