setsid()

Создать новую сессию

Прототип:

#include <unistd.h>
pid_t setsid( void );

Библиотека:

libc

Описание:

Функция setsid() создает новую сессию (сеанс), в которой вызывающий процесс становится лидером сессии без управляющего терминала. Идентификатор группы процессов для вызывающего процесса устанавливается равным идентификатору этого процесса. Вызывающий процесс является единственным процессом в новой группе процессов, а также единственным процессом новой сессии.

Если вызывающий процесс уже является лидером сессии, новая сессия не создается и функция завершается с ошибкой.

Возвращаемое значение:

Новый идентификатор группы процессов для вызывающего процесса. Если возникла ошибка, функция возвращает -1, код ошибки записывается в errno.

Коды ошибок:

EPERM
Вызывающий процесс уже является лидером сессии, или идентификатор группы процессов у процесса, отличного от вызывающего, совпадает с идентификатором вызывающего процесса.

Примеры:

/*
* Лидером сессии можно стать в том случае,
* если процесс не является лидером группы
* для выполняемой из оболочки команды.
*/
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main( void )
{
if ( fork() )
{
if ( setsid() == -1 )
perror( "Родитель: setsid" );
else
printf( "Родитель: Я лидер сессии\n" );
} else {
if ( setsid() == -1 )
perror( "Потомок: setsid" );
else
printf( "Потомок: Я лидер сессии\n" );
}
return (EXIT_SUCCESS);
}

Классификация:

POSIX 1003.1

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

errno, getsid(), setpgid()




Предыдущий раздел: Описание API системной библиотеки