উত্তর:
বিভিন্ন বিকল্প রয়েছে:
ps -fp <pid>
cat /proc/<pid>/cmdline | sed -e "s/\x00/ /g"; echo
/proc/<pid>
লিনাক্সে আরও তথ্য রয়েছে , কেবল একবার দেখুন।
অন্যান্য ইউনিক্সে জিনিসগুলি আলাদা হতে পারে। ps
কমান্ড সব জায়গায় কাজ করবে /proc
কাপড় ওএস নির্দিষ্ট। , AIX উপর উদাহরণস্বরূপ সেখানে নেই cmdline
এ /proc
।
ps -ww -fp <pid>
বিস্তৃত আউটপুট নির্দিষ্ট করার জন্য -ww (অর্থাত্ ) প্রয়োজন হবে যেহেতু যদি কয়েকটি কমান্ড থাকে তবে সেগুলি কেটে যেতে পারে।
-ww
(যতটা কার্নেল দ্বারা সঞ্চিত হয়) বিকল্প পূর্ণ কমান্ড লাইন আর্গুমেন্ট অ্যাক্সেস দেয়। আরও দেখুন: কীভাবে সোলারিস এবং বিএসডি একটি প্রক্রিয়া এবং PS বিকল্পগুলির
cat /proc/<pid>/cmdline
সাইগউইনেও কাজ করে, যেখানে ps
কোনও বিকল্পের সাহায্যে সিএমডি লাইন যুক্তি দেখানো হয় না ।
args
, কমান্ডটি হ'ল ps -o args -p <pid>
এবং এটি কেবলমাত্র যদি দেখতে প্রয়োজন হয় তবে এটি প্রিন্ট args
বা ব্যবহার -O প্রিন্ট করবে । পড়ার চেষ্টা সর্বদা অনর্থক ব্যবহারকারীদের জন্য কাজ করে না। উপযোগ কাজ করবে। cmd
cmd
/proc/<pid>/cmdline
ps
/proc/<pid>/cmdline
সীমাবদ্ধ (PAGE_SIZE কার্নেল প্যারামিটারের মানকে হার্ড কোডিং করা হয়েছে), সুতরাং লম্বা কমান্ড লাইনগুলি এখনও কাটা দেখানো হয়েছে! আরও তথ্যের জন্য stackoverflow.com/questions/199130/… দেখুন । আপনি আপনার কার্নেল সেটিংটি এর সাথে getconf PAGE_SIZE
প্রায়শই জিজ্ঞাসা করতে পারেন , এটি সাধারণত 4096.
এটি কৌশলটি করবে:
xargs -0 < /proc/<pid>/cmdline
Xargs ব্যতীত আর্গুমেন্টগুলির মধ্যে কোনও ফাঁকা স্থান থাকবে না, কারণ সেগুলি NULs এ রূপান্তরিত হয়েছে।
xargs -0 < /proc/<pid>/cmdline
।
লিনাক্স এবং ইউনিক্স সিস্টেমের জন্য আপনি ব্যবহার করতে পারেন ps -ef | grep process_name
সম্পূর্ণ কমান্ড লাইন পেতে ।
সুনোস সিস্টেমে আপনি যদি পুরো কমান্ড লাইন পেতে চান তবে আপনি ব্যবহার করতে পারেন
/usr/ucb/ps -auxww | grep -i process_name
সম্পূর্ণ কমান্ড লাইনটি পেতে আপনাকে সুপার ব্যবহারকারী হতে হবে।
pargs -a PROCESS_ID
কোনও প্রক্রিয়াতে পাস হওয়া যুক্তিগুলির বিস্তারিত তালিকা দেবে। এটি আর্গুমেন্টের অ্যারেটিকে এই জাতীয় ফলাফল দেয়:
argv[o]: first argument
argv[1]: second..
argv[*]: and so on..
আমি লিনাক্সের জন্য অনুরূপ কোনও কমান্ড পাইনি, তবে অনুরূপ আউটপুট পেতে আমি নিম্নলিখিত কমান্ডটি ব্যবহার করব:
tr '\0' '\n' < /proc/<pid>/environ
উপর লিনাক্স
cat /proc/<pid>/cmdline
আপনি প্রক্রিয়াটির কমান্ডলাইনটি পান (অর্গগুলি সহ) তবে সমস্ত সাদা স্থানের সাথে NUL অক্ষরে পরিবর্তিত হয়।
আপনি (সম্পূর্ণ কমান্ড লাইন) এবং (দীর্ঘ বিবরণ) এর pgrep
সাথে ব্যবহার করতে পারেন :-f
-l
pgrep -l -f PatternOfProcess
অন্যান্য পদ্ধতির যে কোনও প্রতিক্রিয়াটির সাথে এই পদ্ধতিটির একটি গুরুত্বপূর্ণ পার্থক্য রয়েছে: এটি সাইগউইন-এ কাজ করে , সুতরাং উইন্ডোজের অধীনে চলমান যে কোনও প্রক্রিয়াটির সম্পূর্ণ কমান্ড লাইনটি ব্যবহার করতে আপনি এটি ব্যবহার করতে পারেন ( যদি আপনি কোনও এলিভেটেড / অ্যাডমিন প্রক্রিয়া সম্পর্কে ডেটা চান তবে উন্নত হিসাবে কার্যকর করুন ) । উইন্ডোজে এটি করার জন্য অন্য কোনও পদ্ধতি আরও বিশ্রী ( উদাহরণস্বরূপ )।
তদ্ব্যতীত: আমার পরীক্ষায়, পিগ্রিপ ওয়ে একমাত্র সিস্টেম যা সাইগউইনের অজগরটির ভিতরে চলমান স্ক্রিপ্টগুলির সম্পূর্ণ পথ অর্জন করতে কাজ করে ।
$ exec -a fakename bash & [1] 14102 [1]+ Stopped exec -a fakename bash $ xargs -0 < /proc/14102/cmdline; fakename $ pgrep -l -f fakename; 14102 bash
pgrep from procps-ng 3.3.15
এবং ব্যবহার করে আমার জন্য কাজ করে না 3.3.12
। যুক্তি ছাড়াই কেবল পিড এবং প্রোরগামের নাম মুদ্রণ করে।
/proc/PID/cmdline
লিনাক্সের ফাঁকা জায়গাগুলির সাথে মুদ্রণের আর একটি রূপ হ'ল:
cat -v /proc/PID/cmdline | sed 's/\^@/\ /g' && echo
এভাবে cat
ছাপে শূন্য অক্ষর হিসাবে ^@
এবং তারপর আপনি তাদের ব্যবহার করে একটি স্পেস দিয়ে প্রতিস্থাপন sed
; echo
একটি নতুন লাইন প্রিন্ট করে।
পাঠ্যকে রূপান্তর করার জন্য উপরের সমস্ত উপায় ছাড়াও, আপনি যদি কেবল 'স্ট্রিংস' ব্যবহার করেন তবে এটি পৃথক লাইনে আউটপুটটিকে ডিফল্টরূপে তৈরি করে দেবে। অতিরিক্ত বেনিফিট সহ এটি এটি আপনার টার্মিনালটিকে উপস্থিত হতে বাধা দিতে পারে এমন কোনও অক্ষরও আটকাতে পারে।
একটি কমান্ডে উভয় আউটপুট:
স্ট্রিং / প্রোক // সেমিডলাইন / প্রোক // এনভায়রনমেন্ট
আসল প্রশ্নটি ... লিনাক্সে এমন কোনও প্রক্রিয়ার আসল কমান্ড লাইনটি দেখার একটি উপায় আছে যা পরিবর্তিত হয়েছে যাতে সেমিডলাইনে চালিত আসল কমান্ডের পরিবর্তে পরিবর্তিত পাঠ্য থাকে।
লিনাক্সে, ব্যাশ সহ, উদ্ধৃত আরোগুলি হিসাবে আউটপুট দিতে যাতে আপনি কমান্ডটি সম্পাদনা করতে এবং এটিকে পুনরায় চালু করতে পারেন
</proc/"${pid}"/cmdline xargs --no-run-if-empty -0 -n1 \
bash -c 'printf "%q " "${1}"' /dev/null; echo
সোলারিসে, বাশ সহ (3.2.51 (1) রিরিজ দিয়ে পরীক্ষা করা হয়েছে) এবং gnu ইউজারল্যান্ড ছাড়াই:
IFS=$'\002' tmpargs=( $( pargs "${pid}" \
| /usr/bin/sed -n 's/^argv\[[0-9]\{1,\}\]: //gp' \
| tr '\n' '\002' ) )
for tmparg in "${tmpargs[@]}"; do
printf "%q " "$( echo -e "${tmparg}" )"
done; echo
লিনাক্স ব্যাশের উদাহরণ (টার্মিনালে পেস্ট করুন):
{
## setup intial args
argv=( /bin/bash -c '{ /usr/bin/sleep 10; echo; }' /dev/null 'BEGIN {system("sleep 2")}' "this is" \
"some" "args "$'\n'" that" $'\000' $'\002' "need" "quot"$'\t'"ing" )
## run in background
"${argv[@]}" &
## recover into eval string that assigns it to argv_recovered
eval_me=$(
printf "argv_recovered=( "
</proc/"${!}"/cmdline xargs --no-run-if-empty -0 -n1 \
bash -c 'printf "%q " "${1}"' /dev/null
printf " )\n"
)
## do eval
eval "${eval_me}"
## verify match
if [ "$( declare -p argv )" == "$( declare -p argv_recovered | sed 's/argv_recovered/argv/' )" ];
then
echo MATCH
else
echo NO MATCH
fi
}
আউটপুট:
MATCH
সোলারিস বাশ উদাহরণ:
{
## setup intial args
argv=( /bin/bash -c '{ /usr/bin/sleep 10; echo; }' /dev/null 'BEGIN {system("sleep 2")}' "this is" \
"some" "args "$'\n'" that" $'\000' $'\002' "need" "quot"$'\t'"ing" )
## run in background
"${argv[@]}" &
pargs "${!}"
ps -fp "${!}"
declare -p tmpargs
eval_me=$(
printf "argv_recovered=( "
IFS=$'\002' tmpargs=( $( pargs "${!}" \
| /usr/bin/sed -n 's/^argv\[[0-9]\{1,\}\]: //gp' \
| tr '\n' '\002' ) )
for tmparg in "${tmpargs[@]}"; do
printf "%q " "$( echo -e "${tmparg}" )"
done; echo
printf " )\n"
)
## do eval
eval "${eval_me}"
## verify match
if [ "$( declare -p argv )" == "$( declare -p argv_recovered | sed 's/argv_recovered/argv/' )" ];
then
echo MATCH
else
echo NO MATCH
fi
}
আউটপুট:
MATCH
tr \\0 ' ' < /proc/<pid>/cmdline