ක්රියාත්මක වන ක්රියාවලියක වර්තමාන ක්රියාකාරී නාමාවලිය (සීඩබ්ලිව්ඩී) සොයා ගැනීමට කෙනෙකුට භාවිතා කළ හැකි විධානය කුමක්ද? මේවා ඔබට ක්රියාවලියෙන් බාහිරව භාවිතා කළ හැකි විධාන වේ.
ක්රියාත්මක වන ක්රියාවලියක වර්තමාන ක්රියාකාරී නාමාවලිය (සීඩබ්ලිව්ඩී) සොයා ගැනීමට කෙනෙකුට භාවිතා කළ හැකි විධානය කුමක්ද? මේවා ඔබට ක්රියාවලියෙන් බාහිරව භාවිතා කළ හැකි විධාන වේ.
Answers:
මා දන්නා ක්රම 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
). ඔබට වාසනාවන්ත යැයි හැඟේ නම්, ඔබට දෙවන පෝරමය භාවිතා කළ හැකිය, එය නාමාවලි නාමයේ ඇති සියලුම හිස් අවකාශය නිහ ly ව යටපත් කරයි.
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
තිබේද?
ඔබේ පද්ධතියට තිබේ නම් /proc
, ඔබට සැමවිටම කළ හැකිය:
readlink -e /proc/$$/cwd
ඔබ උනන්දුවක් දක්වන ක්රියාවලියට වඩා වෙනස් ක්රියාවලියකින් සීඩබ්ලිව්ඩී සොයා ගැනීමට ඔබට අවශ්ය නම්, ඔබ පැහැදිලිවම $$
ඔබේ රුචිකත්වයේ PID සමඟ ආදේශ කළ යුතුය.
පදනම් කරගත් @ ගිලෙස් පිළිතුර ..
ඔබගේ ක්රියාවලියේ PID ඔබ දන්නේ නම් .. මැක් ඕඑස්එක්ස් සහ ලිනක්ස් භාවිතය සඳහා:
lsof -p PID | awk '$4=="cwd" {print $9}'
ක්රියාවලි වැඩ කිරීමට ..
lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing Output information may be incomplete.
වෙන කාටහරි මේක ලැබෙනවාද?