Oturum lideri olarak bir komut dosyası yürütecek bir sarıcı yazmayı deniyorum. linux komutunun setsid
davranışıyla karıştırıldım. Bu komut dosyasını düşünün, test.sh
seslendi:linux command setsid
#!/bin/bash
SID=$(ps -p $$ --no-headers -o sid)
if [ $# -ge 1 -a $$ -ne $SID ] ; then
setsid bash test.sh
echo pid=$$ ppid=$PPID sid=$SID parent
else
sleep 2
echo pid=$$ ppid=$PPID sid=$SID child
sleep 2
fi
:
$ bash
$ SID=$(ps -p $$ --no-headers -o sid)
$ echo pid=$$ ppid=$PPID sid=$SID
pid=9213 ppid=9104 sid= 9104
$ ./test.sh 1 ; sleep 5
pid=9326 ppid=9324 sid= 9326 child
pid=9324 ppid=9213 sid= 9104 parent
$ . ./test.sh 1 ; sleep 5
pid=9213 ppid=9104 sid= 9104 parent
pid=9336 ppid=1 sid= 9336 child
$ echo $BASH_VERSION
4.2.8(1)-release
$ exit
exit
Yani, bana öyle geliyor ki setsid
döner derhal komut kaynaklı olduğunda, ancak komut dosyası yürütüldüğünde çocuğunu bekler. Neden kontrol eden bir tty'nin varlığının setsid
ile ilgisi var? Teşekkürler!
Düzeltme: Açıklama için ilgili tüm komutlara pid/ppid/sid raporlaması ekledim.
Haklısınız. “Setsid” in fazladan bir bayrak almasını teklif etmeye değip değmeyeceğini merak ediyorum, “-w” demek, eğer varlığı varsa çocuğu için beklemesi gerekir. Olduğu gibi, davranışının tutarsız olduğunu hissediyorum: hemen ve sadece bir grup lideri tarafından çalıştırılırsa geri döner (ve çatal). Artı, dediğin gibi, sadece 'setsid' çocuğunu bekleyebilir, çağıran 'bash' torunu bekleyemez. –
Evet; ve sadece genel olarak, beklemeden 'çatal' için garip bir şey. Kolej İşletim Sistemleri profesörünün onaylayacağını sanmıyorum. :-P – ruakh