- •Системные вызовы семейства exec
- •Семейство функций exec()
- •Прототипы функций (1)
- •Прототипы функций (2)
- •execl()
- •execlp()
- •execle()
- •execv()
- •execvp()
- •execve()
- •main
- •Окружение процесса
- •Переменные окружения
- •Переменные окружения
- •Системные вызовы (1)
- •Системные вызовы (2)
- •Системные вызовы (3)
- •Идентификаторы
- •euid
- •suid
- •В большинстве случаев все идентификаторы процесса, связанные с пользователями – uid, euid и
- •При выполнении exec
- •Наследование пользовательских идентификаторов
- •Файл
- •Системные вызовы
- •Программы,
- •Сигналы
- •Назначение сигналов
- •Надежные и ненадежные
- •Свойства сигналов
- •Причины отправки
- •По инициативе ядра
- •Доставка сигнала
- •Когда core-файл не
- •Диспозиция по умолчанию
- •Перехват сигнала
- •Сигналы (1)
- •Сигналы (2)
- •Сигналы (3)
- •Сигналы (4)
- •SIGPIPE
- •SIGCHLD
- •SIGUSR1, SIGUSR2
- •SIGALRM
- •Надежные сигналы
- •Множество сигналов
- •Библиотечные функции
- •Управление маской
- •Работа с сигналами
- •Работа с диспозицией
- •Структура sigaction
- •Флаги sa_flags
- •Доставка и обработка сигнала
- •Функция ядра issig() (1)
- •Функция ядра issig() (2)
- •Группы и сеансы
- •Группы и сеансы (1)
- •Группы и сеансы (2)
- •Группы и сеансы (3)
- •Системные вызовы (группы)
- •Системные вызовы (сеансы)
- •Текущие и фоновые
- •Листинг ps
- •Процессы-демоны
- •Демоны
- •init
- •Последовательность шагов (1)
- •Последовательность шагов (2)
- •Последовательность шагов (3)
- •Известные демоны
main
int main(int argc, char * argv[], char * envp[]);
•argc – количество аргументов командной строки
•argv – вектор аргументов командной строки
•envp – вектор окружения
Окружение процесса
Набор текстовых строк вида: переменная=значение
Обычно используются для передачи текстовой информации между процессами.
Переменные окружения
Переменные окружения
•PATH – пути поиска исполнимых файлов
•HOME – домашний каталог пользователя
•PS1 – приглашение Shell
•TERM – тип терминала
Системные вызовы (1)
char * getenv(const char * name); вернуть значение переменной
int putenv(char * string); поместить строку в окружение, параметр string станет частью окружения процесса
Системные вызовы (2)
int setenv(const char * name, const char * value, int overwrite);
добавить / изменить значение переменной окружения
int unsetenv(const char * name); удалить переменную
Системные вызовы (3)
int clearenv();
полностью очистить окружение – глобальная переменная environ получит значение NULL
Идентификаторы
пользователя
uid – реальный идентификатор пользователя
euid – эффективный идентификатор пользователя
suid – сохраненный идентификатор пользователя
uid
Определяет «истинного» владельца процесса, того на чей счет относятся потребляемые процессом ресурсы.
euid
Определяет права доступа к объектам системы (файлы (особенности Linux), процессы, IPC-средства.
