سؤال كيفية الحصول على PID الأم لعملية معينة في جنو / لينكس من سطر الأوامر؟


تم حلها قبل السؤال: cat /proc/1111/status | grep PPid


79
2018-06-08 09:42


الأصل


بسرعة: grep PPid status |cut -f2 كما هو الحال في time(for((i=0;i<1000;i++));do grep PPid status |cut -f2 >/dev/null;done). أتساءل عما إذا كان هناك شيء أكثر سرعة؟ - Aquarius Power
AquariusPower منذ أن تسأل ، fgrep هو أسرع من grep. fgrep PPid status |cut -f2 - jbo5112
سيد هو طريقة أسرع من grep وقطع: sed -rn '/PPid/ s/^.*:\s+// p' < status - Marian


الأجوبة:


سطر الأوامر:

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=

إذا لم يتم توفير PID للوظيفة أو البرنامج النصي ، فإنها الافتراضية تظهر PPID للعملية الحالية.

لاستخدام الاسم المستعار ، يجب توفير PID.


92
2018-06-08 11:21



ال = ليست ضرورية ، على الأقل على OS X 10.8.2. - jtbandes
jtbandes: العلامة المكافئة المستخدمة هنا تمنع إخراج خط الرأس (لينكس و نظام التشغيل العاشر). - Dennis Williamson


هذا هو واحد من تلك الأشياء التي تعلمتها ، وتنسى ، وتعلم ، وتكرار. لكنها مفيدة. تُظهر العلامة "s" الخاصة بأمر pstree شجرة مع ورقة في N:

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

11
2018-01-31 20:32





PID الأصل في PPID متغير shell ، لذلك

echo $PPID

11
2017-09-24 11:55



نعم ، ولكن 1. أريد عنصر PID لعملية أخرى ، 2. أريد أن أكون قادرة على اجتياز جميع الأسلاف للبدء. - Vi.
من ناحية أخرى ، باستخدام $PPID حل المشكلة التي واجهتها والتي اقترحت Google هذه الصفحة كإجابة عليها. - Paul Whittaker


هذا الأمر:

ps j

ستقوم بطباعة معرفات الوالدين (PPID) من جميع العمليات.

من أجل العملية الفردية ، فقط قم بتمرير PID ، مثل: ps j 1234.

لاستخراج القيمة فقط ، قم بتصفية الإخراج بواسطة awk، مثل:

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

لإدراج PIDs لجميع الآباء ، ثم استخدم pstree، مثل:

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

للحصول على PID الأم من العملية الحالية ، ثم استخدم echo $$.


6
2018-02-19 21:31



pstree هي اجمل واحد رأيته هنا. - sudo


قراءة / proc / $ PID / status. يمكن كتابتها بسهولة:

#! / بن / ش
P = $ 1
if [-z "$ P"]؛ ثم
    قراءة P
فاي
cat / proc / "$ P" / status | grep PPid: | grep -o "[0-9] *"

5
2018-06-08 09:44



grep '^PPid:' /proc/$1/status | grep -o '[0-9]*' هو كل ما تحتاجه. (أنه غير شائع جدا لأدوات يونكس للقيام به if [ -z ]; then read شيء.) - grawity
grawity يساعد في فعل أشياء مثل echo $$ | ppid | ppid | ppid - Vi.
UUOC استخدام غير مجدية من القط - Felipe Alvarez
FelipeAlvarez ، لا تستخدم يدي للكتابة < /some/file grep | grep | .... - Vi.
ماذا عن grep /some/file - Felipe Alvarez


على نظام التشغيل Linux:

ps hoppid $thatprocess

3
2017-10-21 17:30





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

مثال أكثر تعقيدًا قليلاً يتحقق من أمر أحد الوالدين الذي بدأ العملية الحالية قم بتغيير comm = إلى cmd = لرؤية الأمر الكامل


2
2017-10-19 20:08



استخدام غير مجدية من صدى صوت؟ ؛) - bobbogo
مطلوب بالفعل في بعض المحطات. أن نكون صادقين لا أتذكر بالضبط ولكن في الواقع حل مشكلة. :د - sebastian_t


في ما يلي حل سريع يجب أن يعمل أيضًا:

ps $$

1
2017-09-12 06:18



هذا لا يعطي الأم PID وهو ما طلب OP. - Dennis Williamson


يركض top مع أي خيارات تريدها ، مثل -u username and -p PID.

و في حين top تعمل الصحافة F، يعرض قائمة بالخيارات التي تريد عرضها top الإخراج ، وسيتم عرض المعلمات المعروضة في حروف CAPITAL والمعلمات التي تظهر أو لا تظهر بأحرف صغيرة.

لذلك ، بإدخال الحرف قبل المعلمة ، يمكنك تمكينه أو تعطيله. بالنسبة إلى معرف العملية الأصلية ، يتعين عليك إدخالها ب ثم اضغط أدخل، ستعرض PPID في الإخراج العلوي.


1
2017-11-23 12:21



هو لاستخدامها بشكل غير تفاعلي. أعلم بالفعل أن في htop يمكنك تكوين PPID عمود. - Vi.