سؤال

لدي نص في باش يسمى Script.sh, ، ويحتاج إلى معرفة PID الخاصة به (أي أحتاج إلى الحصول على PID داخل Script.sh)

أي فكرة عن كيفية القيام بذلك ؟

هل كانت مفيدة؟

المحلول

يحتوي المتغير "$$" على PID.

نصائح أخرى

استعمال $BASHPID أو $$

انظر كتيب لمزيد من المعلومات ، بما في ذلك الاختلافات بين الاثنين.

tl ؛ drtfm

  • $$ يتوسع إلى معرف العملية للقذيفة.
    • في () Subshell ، يمتد إلى معرف العملية للقذيفة الاحتجاج ، وليس subshell.
  • $BASHPID يتوسع إلى معرف العملية لعملية باش الحالية.
    • في () Subshell ، يمتد إلى معرف العملية من subshell

بالإضافة إلى المثال الوارد في دليل البرمجة النصية المتقدمة المشار إليه من قبل Jefromi, ، توضح هذه الأمثلة كيف تنشئ الأنابيب subshells:

$ echo $$ $BASHPID | cat -
11656 31528
$ echo $$ $BASHPID
11656 11656
$ echo $$ | while read line; do echo $line $$ $BASHPID; done
11656 11656 31497
$ while read line; do echo $line $$ $BASHPID; done <<< $$
11656 11656 11656

يتم تخزين PID في $$.

مثال: kill -9 $$ سوف يقتل مثال الصدفة يسمى من.

يمكنك استخدام ال $$ عامل.

إذا كانت العملية عبارة عن عملية طفل ولم يتم تعيين $ bashpid ، فمن الممكن الاستعلام عن PPID لعملية الطفل التي تم إنشاؤها لعملية التشغيل. قد يكون قبيح بعض الشيء ، لكنه يعمل. مثال:

sleep 1 &
mypid=$(ps -o ppid= -p "$!")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top