команда 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 для всех соответствующих команд.