มักมีความสับสนระหว่างการฟอร์กกระบวนการและการดำเนินการ
เมื่อคุณทำตามคำสั่งของbashเชลล์
$ sh -c 'exec env ps'
กระบวนการP1 ที่ออก$พรอมต์นั้นกำลังเรียกใช้bashรหัสในปัจจุบัน นั่นbashรหัสส้อมกระบวนการใหม่P2ที่รัน/bin/shซึ่งจากนั้นจะดำเนินการที่แล้วรัน/usr/bin/env/bin/ps
ดังนั้นP2ได้ในการเปิดดำเนินการของรหัสbash, sh, และenvps
ps(หรือคำสั่งอื่น ๆ เช่นสคริปต์ที่เราจะใช้แทนที่นี่) ไม่มีทางที่จะรู้ว่ามันถูกใช้งานโดยenvคำสั่ง
ทั้งหมดก็สามารถทำได้คือการหาสิ่งที่กระบวนการ id แม่เป็นซึ่งในกรณีนี้จะเป็นได้ทั้งP1หรือ1ถ้าP1ได้ตายในช่วงเวลาหรือบนลินุกซ์กระบวนการอื่นที่ได้รับการกำหนดให้เป็นsubreaper1แทน
จากนั้นสามารถสืบค้นระบบสำหรับคำสั่งที่กระบวนการกำลังทำงานอยู่ (เช่นเดียวกับreadlink /proc/<pid>/exeบน Linux) หรืออาร์กิวเมนต์ใดที่ส่งผ่านไปยังคำสั่งสุดท้ายที่เรียกใช้งาน (เช่นเดียวกับps -o args= -p <pid>)
หากคุณต้องการให้สคริปต์ของคุณรู้ว่าสิ่งใดที่ถูกเรียกใช้วิธีที่เชื่อถือได้ก็คือให้ผู้เรียกใช้บอกมัน ที่สามารถทำได้เช่นผ่านตัวแปรสภาพแวดล้อม ตัวอย่างเช่นscript1สามารถเขียนเป็น:
#! /bin/sh -
INVOKER=$0 script2 &
และscript2:
#! /bin/sh -
printf '%s\n' "I was invoked by $INVOKER"
# and in this case, we'll probably find the parent process is 1
# (if not now, at least one second later) as script1 exited just after
# invoking script2:
ps -fp "$$"
sleep 1
ps -fp "$$"
exit
$INVOKERจะ ( ทั่วไป ) script1ประกอบด้วยเส้นทางไปยัง ในบางกรณีอาจเป็นเส้นทางสัมพัทธ์แม้ว่าและเส้นทางจะสัมพันธ์กับไดเรกทอรีทำงานปัจจุบัน ณ เวลาที่script1เริ่มต้น ดังนั้นหากscript1มีการเปลี่ยนแปลงไดเรกทอรีการทำงานปัจจุบันก่อนที่จะเรียกscript2, script2จะได้รับข้อมูลที่ไม่ถูกต้องเป็นสิ่งที่เรียกว่า ดังนั้นจึงอาจดีกว่าเพื่อให้แน่ใจว่า$INVOKERมีเส้นทางที่แน่นอน (โดยเฉพาะการรักษาชื่อเบส) เช่นโดยการเขียนscript1เป็น:
#! /bin/sh -
mypath=$(
mydir=$(dirname -- "$0") &&
cd -P -- "$mydir" &&
pwd -P) && mypath=$mypath/$(basename -- "$0") || mypath=$0
... some code possibly changing the current working directory
INVOKER=$mypath script2
ใน POSIX เชลล์$PPIDจะประกอบด้วย pid ของพาเรนต์ของกระบวนการที่ดำเนินการเชลล์ในเวลาที่การเริ่มต้นเชลล์นั้น หลังจากนั้นตามที่เห็นด้านบนกระบวนการผู้ปกครองอาจเปลี่ยนแปลงหากกระบวนการของ id $PPIDตาย
zshในzsh/systemโมดูลสามารถสอบถามปัจจุบัน pid แม่ของปัจจุบัน (ย่อย) $sysparams[ppid]เปลือก ในเปลือกหอย POSIX, คุณจะได้รับในปัจจุบัน PPID ของกระบวนการที่ดำเนินการล่าม (สมมติว่ามันยังทำงานอยู่) ps -o ppid= -p "$$"กับ ด้วยbashคุณจะได้รับ PPID ของปัจจุบัน (ย่อย) ps -o ppid= -p "$BASHPID"เปลือกกับ