omando @linux setsid

Estou tentando escrever um wrapper que executará um script como líder de sessão. Estou confuso com o comportamento do comando linuxsetsid. Considere este script, chamadotest.sh:

#!/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

A saída difere dependendo de ser executada ou originada:

$ 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

ntão, parece-me quesetsid retorna imediatamente quando o script é originado, mas aguarda seu filho quando o script é executado. Por que a presença de um controle tty tem algo a ver comsetsid? Obrigado

Edit: Para esclarecimento, adicionei relatórios pid / ppid / sid a todos os comandos relevante

questionAnswers(6)

yourAnswerToTheQuestion