команда setux linux

Я пытаюсь написать оболочку, которая будет выполнять сценарий в качестве лидера сеанса. Меня смущает поведение команды linuxsetsid, Рассмотрим этот скрипт, называемыйtest.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

Вывод различается в зависимости от того, выполнен он или получен:

$ 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

Итак, мне кажется, чтоsetsid немедленно возвращается, когда скрипт получен, но он ждет своего потомка, когда скрипт выполняется. Почему присутствие контролирующего tty имеет какое-либо отношение кsetsid? Спасибо!

Изменить: Для пояснения я добавил отчеты pid / ppid / sid для всех соответствующих команд.

Ответы на вопрос(3)

Ваш ответ на вопрос