কমান্ড লাইন থেকে জিএনইউ / লিনাক্সে প্রদত্ত প্রক্রিয়াটির প্যারেন্ট পিআইডি কীভাবে পাবেন?


90

জিজ্ঞাসার আগে সমাধান করা: cat /proc/1111/status | grep PPid


দ্রুত: grep PPid status |cut -f2মত মধ্যে time(for((i=0;i<1000;i++));do grep PPid status |cut -f2 >/dev/null;done); আরও দ্রুত কিছু আছে যদি অবাক?
কুম্ভ শক্তি

1
@ অ্যাকোয়ারিয়াস পাওয়ার যেহেতু আপনি জিজ্ঞাসা করছেন, fgrep গ্রেপের চেয়ে দ্রুত। fgrep PPid status |cut -f2
jbo5112

সেড গ্রেপ এবং কাটা থেকে বেশ দ্রুত গতিতে:sed -rn '/PPid/ s/^.*:\s+// p' < status
মারিয়ান

উত্তর:


107

কমান্ড লাইন:

ps -o ppid= -p 1111

ফাংশন:

ppid () { ps -p ${1:-$$} -o ppid=; }

এলিয়াস (একটি ফাংশন পছন্দনীয় ):

alias ppid='ps -o ppid= -p'

লিপি:

#!/bin/sh
pid=$1
if [ -z $pid ]
then
    read -p "PID: " pid
fi
ps -p ${pid:-$$} -o ppid=

যদি কোনও পিআইডি ফাংশন বা স্ক্রিপ্টে সরবরাহ না করা হয় তবে তারা বর্তমান প্রক্রিয়ার পিপিআইডি প্রদর্শন করতে ডিফল্ট হয়।

উপনামটি ব্যবহার করতে, একটি পিআইডি সরবরাহ করতে হবে।


=সাইন অন্তত উপর OS X এর 10.8.2, প্রয়োজন নেই।
জেটব্যান্ডস

5
@ জজব্যান্ডস: এখানে ব্যবহৃত সমান চিহ্নটি শিরোনামের লাইন ( লিনাক্স এবং ওএস এক্স ) এর আউটপুটকে দমন করে ।
ডেনিস উইলিয়ামসন

13

এটি আমি শিখেছি, ভুলে যাচ্ছি, পুনরায় শিখি, পুনরাবৃত্তি করি things তবে এটি দরকারী। Pstree কমান্ডের পতাকা N তে একটি পাতা সহ একটি গাছ দেখায়:

pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks

12

প্যারেন্ট পিড শেল ভেরিয়েবল পিপিআইডি-তে থাকে

echo $PPID

1
হ্যাঁ, তবে ১। আমি অন্যান্য প্রক্রিয়ার প্যারেন্ট পিড চাই, ২. আমি সমস্ত পূর্বপুরুষদের দীক্ষা দিতে সক্ষম হতে চাই।
vi।

1
অন্যদিকে, ব্যবহার করে $PPIDআমার কেবলমাত্র সমস্যার সমাধান হয়েছিল যা গুগল এই পৃষ্ঠাটির উত্তর হিসাবে প্রস্তাব করেছিল।
পল হুইটকার

12

PPIDসমস্ত প্রক্রিয়াটির প্যারেন্ট আইডস ( ) মুদ্রণ করতে , এই আদেশটি ব্যবহার করুন:

ps j

একক প্রক্রিয়ার জন্য, শুধু PID, পাস, মত: ps j 1234

কেবলমাত্র মান বের করতে, ফিল্টার আউটপুট দ্বারা awk:

ps j | awk 'NR>1 {print $3}' # BSD ps
ps j | awk 'NR>1 {print $1}' # GNU ps

সমস্ত পিতামাতার পিআইডি তালিকা করতে, ব্যবহার করুন pstree(এটি না থাকলে এটি ইনস্টল করুন):

$ pstree -sg 1234
systemd(1)───sshd(1036)───bash(2383)───pstree(3007)

বর্তমান প্রক্রিয়াটির প্যারেন্ট পিআইডি পেতে, ব্যবহার করুন echo $$


1
pstreeআমি এখানে দেখা সবচেয়ে সুন্দর এক।
সুডো

ps jএটি দুর্দান্ত কারণ এটি অনেকগুলি ডিস্ট্রোতে উপলব্ধ এবং সহজেই কম্পোজেবল
কনার

6

/ পড়ুন / $ পিআইডি / স্থিতি পড়ুন। সহজে স্ক্রিপ্ট করা যায়:

#! / বিন / SH
পি = $ 1
যদি [-z "$ পি"]; তারপর
    পড়ুন পি
ফাই
cat / proc / "$ P" / status | গ্রেপ পিপিড: | গ্রেপ -ও "[0-9] *"

2
grep '^PPid:' /proc/$1/status | grep -o '[0-9]*'আপনার যা দরকার তা হল। ( ইউনিক্স সরঞ্জামগুলির পক্ষে এটি করা খুব অস্বাভাবিকif [ -z ]; then read ))
গ্রাভিটি

@ গ্র্যাটি এই মত কাজগুলি করতে সহায়তা করেecho $$ | ppid | ppid | ppid
vi।

2
UUOC বিড়ালের অকেজো ব্যবহার
Alvarez

@ ফিলিপ আলভারেজ, আমার হাত টাইপ করতে ব্যবহৃত হয় না < /some/file grep | grep | ...
vi।

2
কী সম্পর্কেgrep /some/file
ফিলিপ আলভারেজ


2
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
    tmux

আরও কিছু জটিল উদাহরণ যা বর্তমান প্রক্রিয়া শুরু করে এমন কোনও পিতামাতার কমান্ড পরীক্ষা করে যা সম্পূর্ণ কমান্ড দেখতে কম = পরিবর্তন করতে = সিএমডি = পরিবর্তন করে


প্রতিধ্বনির অকেজো ব্যবহার ? ;)
বোবোগো

এটি আসলে কিছু টার্মিনালগুলিতে প্রয়োজনীয়। সত্যি কথা বলতে আমি ঠিক মনে করি না তবে এটি আসলে একটি সমস্যার সমাধান করেছে। : ডি
সেবাস্তিয়ান_টি


1

আপনার পছন্দসই topবিকল্পগুলির সাথে চালান -u username and -p PID

এবং topপ্রেস টি কাজ করার সময় f, এটি topআউটপুটটিতে আপনি প্রদর্শন করতে চান এমন বিকল্পগুলির একটি তালিকা প্রদর্শন করে এবং প্রদর্শিত পরামিতিগুলি বড় অক্ষরে প্রদর্শিত হবে এবং যে পরামিতিগুলি ছোট অক্ষরে প্রদর্শিত হবে বা প্রদর্শিত হবে না তা প্রদর্শন করা হবে।

সুতরাং প্যারামিটারের আগে চিঠিটি প্রবেশ করে আপনি এটি সক্ষম বা অক্ষম করতে পারবেন। প্যারেন্ট প্রসেস আইডির জন্য আপনাকে প্রবেশ করতে হবে bএবং তারপরে টিপতে হবে Enter, এটি শীর্ষ আউটপুটে পিপিআইডি প্রদর্শন করবে।


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