В семействе exec
есть несколько функций: execve(2)
, execl(3)
, execle(3)
, execlp(3)
, execv(3)
, execvp(3)
.Первый, execve(2)
предоставляется ядром операционной системы как системный вызов.(Хорошо, хорошо, функция, которую вызывают программы, предоставляется библиотекой системы C, но it - это простая оболочка для системного вызова.) Другие функции предоставляют немного другую семантику и реализуются в терминахexecve(2)
function.
Оболочки могут использовать execvp(3)
или execlp(3)
для обеспечения PATH
поиска исполняемых файлов, но по крайней мере bash(1)
хэши полный путь к исполняемым файламобеспечить выигрыш в производительности.(Подробнее см. bash(1)
встроенный hash
.)
system(3)
реализован через /bin/sh -c
, как вы и предполагали.
Стандартный вход и выход настроенв зависимости от того, какая программа породила оболочку.Если пользователь входит в консоль напрямую, он будет обрабатываться agetty(8)
или mgetty(8)
или любой другой программой, подобной getty
, которая обрабатывает прямой вход.Если пользователь входит через sshd(8)
, то sshd(8)
отвечает за создание pty
и делегирование подчиненного терминала в оболочку.Если пользователь создает свои оболочки через xterm(1)
или другие эмуляторы терминала, то эти процессы будут отвечать за подключение стандартного ввода, вывода и ошибки для оболочки.