Süreç çatallama ile yürütme arasında genellikle karışıklık vardır.
Bir bashkabuk isteminde yaptığınızda .
$ sh -c 'exec env ps'
Bu istemi veren P1 işlemi $şu anda bashkod çalıştırıyor . Bu bashkod yürüten yeni bir işlem P2'yi çatallar ve yürütür /bin/shve /usr/bin/envyürütür /bin/ps.
Yani P2 sırayla kodunu yürüttü bash, sh, envve ps.
ps(veya burada kullanacağımız komut dosyası gibi herhangi bir komutun) envkomut tarafından yürütüldüğünü bilmenin bir yolu yoktur .
Bütün yapabildiği kendi üst süreç kimliği ya olurdu bu durumda, hangi ne olduğunu öğrenmek ise P1 veya 1eğer P1 başka bir işlem aralığında veya Linux üzerinde ölen bir olarak belirlenmiş edildiğini subreaper yerine 1.
Bu süreç olduğunu emredeceğimi Daha sonra için sistem sorgulayabilir anda (olduğu gibi çalışan readlink /proc/<pid>/exeveya Linux) ne (olduğu gibi son çalıştırılan komutun argümanlarla ps -o args= -p <pid>).
Senaryonuzun neyin çağrıldığını bilmesini istiyorsanız, davetlinin bunu söylemesini sağlamak güvenilir bir yol olacaktır. Bu, örneğin bir ortam değişkeni ile yapılabilir. Örneğin script1şu şekilde yazılabilir:
#! /bin/sh -
INVOKER=$0 script2 &
Ve 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( genellikle ) için bir yol içerecektir script1. Bazı durumlarda, bu göreceli bir yol olabilir ve yol, başlangıçtaki geçerli çalışma dizinine göreli olacaktır script1. Bu nedenle , script1aramadan önce geçerli çalışma dizinini değiştirirse, aradığı şey hakkında yanlış bilgi alırsınız. Bu nedenle, aşağıdaki gibi yazarak olduğu gibi mutlak bir yol (tercihen taban adını koruyarak) içerdiğinden emin olmak tercih edilebilir:script2script2$INVOKERscript1
#! /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 mermilerinde, $PPIDkabuğun başlatılması sırasında mermiyi yürüten işlemin üst öğesinin pid'ini içerecektir. Bundan sonra, yukarıda görüldüğü gibi, kimlik süreci $PPIDölürse üst süreç değişebilir .
zshiçerisinde zsh/systemmodülü, sorgu mevcut olan akım (alt) kabuğun üst PID $sysparams[ppid]. POSIX mermilerinde, yorumlayıcıyı yürüten işlemin geçerli ppid'ini (hala çalıştığını varsayarak) alabilirsiniz ps -o ppid= -p "$$". İle bash, geçerli (alt) kabuğun ppid'ini ile alabilirsiniz ps -o ppid= -p "$BASHPID".