কমান্ড লাইন আরিগগুলি ইউনিক্স / লিনাক্স সিস্টেমের চলমান প্রক্রিয়াতে কীভাবে প্রেরণ করা যায়?


202

সুনোস-এ একটি pargsকমান্ড রয়েছে যা চলমান প্রক্রিয়াতে প্রেরিত কমান্ড লাইন আর্গুমেন্টগুলি মুদ্রণ করে।

অন্যান্য ইউনিক্স পরিবেশে কি একই জাতীয় আদেশ রয়েছে?


উত্তর:


307

বিভিন্ন বিকল্প রয়েছে:

ps -fp <pid>
cat /proc/<pid>/cmdline | sed -e "s/\x00/ /g"; echo

/proc/<pid>লিনাক্সে আরও তথ্য রয়েছে , কেবল একবার দেখুন।

অন্যান্য ইউনিক্সে জিনিসগুলি আলাদা হতে পারে। psকমান্ড সব জায়গায় কাজ করবে /procকাপড় ওএস নির্দিষ্ট। , AIX উপর উদাহরণস্বরূপ সেখানে নেই cmdline/proc


49
লিনাক্সে, আপনার সম্ভবত ps -ww -fp <pid>বিস্তৃত আউটপুট নির্দিষ্ট করার জন্য -ww (অর্থাত্ ) প্রয়োজন হবে যেহেতু যদি কয়েকটি কমান্ড থাকে তবে সেগুলি কেটে যেতে পারে।
শিলফিডে

2
-ww(যতটা কার্নেল দ্বারা সঞ্চিত হয়) বিকল্প পূর্ণ কমান্ড লাইন আর্গুমেন্ট অ্যাক্সেস দেয়। আরও দেখুন: কীভাবে সোলারিস এবং বিএসডি একটি প্রক্রিয়া এবং PS বিকল্পগুলির
গুরুম

3
cat /proc/<pid>/cmdlineসাইগউইনেও কাজ করে, যেখানে psকোনও বিকল্পের সাহায্যে সিএমডি লাইন যুক্তি দেখানো হয় না ।
lechup

3
লিনাক্স-এ, আপনার যদি কেবল এটির প্রয়োজন হয় args, কমান্ডটি হ'ল ps -o args -p <pid>এবং এটি কেবলমাত্র যদি দেখতে প্রয়োজন হয় তবে এটি প্রিন্ট argsবা ব্যবহার -O প্রিন্ট করবে । পড়ার চেষ্টা সর্বদা অনর্থক ব্যবহারকারীদের জন্য কাজ করে না। উপযোগ কাজ করবে। cmdcmd/proc/<pid>/cmdlineps
21

2
ইঙ্গিত: দৈর্ঘ্য /proc/<pid>/cmdlineসীমাবদ্ধ (PAGE_SIZE কার্নেল প্যারামিটারের মানকে হার্ড কোডিং করা হয়েছে), সুতরাং লম্বা কমান্ড লাইনগুলি এখনও কাটা দেখানো হয়েছে! আরও তথ্যের জন্য stackoverflow.com/questions/199130/… দেখুন । আপনি আপনার কার্নেল সেটিংটি এর সাথে getconf PAGE_SIZEপ্রায়শই জিজ্ঞাসা করতে পারেন , এটি সাধারণত 4096.
t0r0X

61

এটি কৌশলটি করবে:

xargs -0 < /proc/<pid>/cmdline

Xargs ব্যতীত আর্গুমেন্টগুলির মধ্যে কোনও ফাঁকা স্থান থাকবে না, কারণ সেগুলি NULs এ রূপান্তরিত হয়েছে।


3
এটি সংক্ষিপ্ত করা যেতে পারে xargs -0 < /proc/<pid>/cmdline
slm

এটি আমার আউটপুট কেটে যাচ্ছে। কোন পরামর্শ?
জনসাম

কখনও কোন কাটাছবি লক্ষ্য করেনি - আপনি একটি উদাহরণ দিতে পারেন?
মাইকেল বেকলিং

এইভাবে, আপনি এটি বলতে পারবেন না এটি কোনও ইনলাইন স্পেস বা আর্গুমেন্টের সীমানা কিনা।
আইভান_পোজদেদেভ

19

সম্পূর্ণ কমান্ডলাইন

লিনাক্স এবং ইউনিক্স সিস্টেমের জন্য আপনি ব্যবহার করতে পারেন 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

14

উপর লিনাক্স

cat /proc/<pid>/cmdline

আপনি প্রক্রিয়াটির কমান্ডলাইনটি পান (অর্গগুলি সহ) তবে সমস্ত সাদা স্থানের সাথে NUL অক্ষরে পরিবর্তিত হয়।


3
হোয়াইটস্পেস সরানো হয়নি, এটি NULs দিয়ে প্রতিস্থাপিত হয়েছে।
বিডনলান

@ বিডনলান আহ, আমি এটি চেক করিনি। ভালো বল ধরা!
লোথার

4
xargs -0 প্রতিধ্বনি </ proc / <pid> / সেমিডলাইন। আপনি এটি / proc / <pid> / এনভায়রনমেন্টের সাথেও করতে পারেন, যদিও আপনি এটির জন্য -n 1 যোগ করতে চাইতে পারেন।
ক্যামে

আমার সিস্টেমে কোনও / proc ফাইল সিস্টেম নেই :( অন্য কোনও সমাধান?
হেমন্ত

খনি দীর্ঘ দীর্ঘ প্যারামিটার সহ একটি জাভা প্রক্রিয়া। এটি আমার আউটপুট কেটে যাচ্ছে। কোন পরামর্শ?
জনসাম

14

আপনি (সম্পূর্ণ কমান্ড লাইন) এবং (দীর্ঘ বিবরণ) এর 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। যুক্তি ছাড়াই কেবল পিড এবং প্রোরগামের নাম মুদ্রণ করে।
সোসোকি

4

/proc/PID/cmdlineলিনাক্সের ফাঁকা জায়গাগুলির সাথে মুদ্রণের আর একটি রূপ হ'ল:

cat -v /proc/PID/cmdline | sed 's/\^@/\ /g' && echo

এভাবে catছাপে শূন্য অক্ষর হিসাবে ^@এবং তারপর আপনি তাদের ব্যবহার করে একটি স্পেস দিয়ে প্রতিস্থাপন sed; echoএকটি নতুন লাইন প্রিন্ট করে।


এফওয়াইআই, আপনি বিড়াল -v / প্রক / পিআইডি / সেমিডলাইনও ব্যবহার করতে পারেন সেডস / \ ^ @ / \ n / জি ' । এটি শূন্য চরিত্রটিকে একটি নতুন লাইন চরিত্রের সাথে প্রতিস্থাপন করবে। এটি করার সাথে সাথে প্রতিটি যুক্তি তার নিজস্ব লাইনে মুদ্রিত হবে। এইভাবে, অন্যের থেকে একটি যুক্তি বলতে আরও সহজ easier
TSJNachos117

2

আপনি কেবল ব্যবহার করতে পারেন:

ps -o args= -f -p ProcessPid

2

স্ট্রিমটি সম্পাদনা করতে একাধিক কমান্ড ব্যবহার না করে কেবল একটি ব্যবহার করুন - ট্র একটি অক্ষরটিকে অন্যটিতে অনুবাদ করে:

tr '\0' ' ' </proc/<pid>/cmdline

1

পাঠ্যকে রূপান্তর করার জন্য উপরের সমস্ত উপায় ছাড়াও, আপনি যদি কেবল 'স্ট্রিংস' ব্যবহার করেন তবে এটি পৃথক লাইনে আউটপুটটিকে ডিফল্টরূপে তৈরি করে দেবে। অতিরিক্ত বেনিফিট সহ এটি এটি আপনার টার্মিনালটিকে উপস্থিত হতে বাধা দিতে পারে এমন কোনও অক্ষরও আটকাতে পারে।

একটি কমান্ডে উভয় আউটপুট:

স্ট্রিং / প্রোক // সেমিডলাইন / প্রোক // এনভায়রনমেন্ট

আসল প্রশ্নটি ... লিনাক্সে এমন কোনও প্রক্রিয়ার আসল কমান্ড লাইনটি দেখার একটি উপায় আছে যা পরিবর্তিত হয়েছে যাতে সেমিডলাইনে চালিত আসল কমান্ডের পরিবর্তে পরিবর্তিত পাঠ্য থাকে।


1

সোলারিসে

     ps -eo pid,comm

অনুরূপ সিস্টেমের মতো ইউনিক্সে ব্যবহার করা যেতে পারে।


1

লিনাক্সে, ব্যাশ সহ, উদ্ধৃত আরোগুলি হিসাবে আউটপুট দিতে যাতে আপনি কমান্ডটি সম্পাদনা করতে এবং এটিকে পুনরায় চালু করতে পারেন

</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

0

যদি আপনি সোলারিসের পারগগুলির মতো একটি দীর্ঘ-সম্ভাব্য (নিশ্চিত হন যে সেখানে সীমাবদ্ধতাগুলি কী আছে তা) পেতে চান তবে আপনি এটি লিনাক্স এবং ওএসএক্সে ব্যবহার করতে পারেন:

ps -ww -o pid,command [-p <pid> ... ]

-1

ps -nএকটি লিনাক্স টার্মিনাল চেষ্টা করুন । এটি প্রদর্শিত হবে:

1. সমস্ত প্রক্রিয়া চলমান , তাদের কমান্ড লাইন এবং তাদের পিআইডি

  1. প্রোগ্রামটি প্রক্রিয়াগুলি অবহিত করে।

এরপরে আপনি জানতে পারবেন কোন প্রক্রিয়াটি হত্যা করা উচিত

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.