No Linux, quase todos os processos (incluindo servidores e programas daemon) são iniciados com um fork(2) (às vezes implementado em sua biblioteca C padrão usando clone (2) ) geralmente seguido por execve (2) syscall. A função de biblioteca daemon (3) usa essas (e algumas outras) syscalls (listado em syscalls (2) ....)
As únicas exceções são poucos processos iniciados magicamente pelo kernel . Estes incluem:
-
init (geralmente
/sbin/init
, o que poderia ser systemd atualmente, mas você pode inicializar seu kernel e passarinit=/bin/bash
para ele através do GRUB, que é iniciado na inicialização do kernel. -
alguns poucos programas iniciados magicamente pelo kernel (quando algum evento externo ocorre), por exemplo às vezes modprobe , hotplug , etc ....
init
existia em 1980 em Unixes (por exemplo, SunOS3). AFAIK, iniciado automaticamente com hotplug
-como processos são uma adição recente ao Linux (provavelmente Linux 3, ou pelo menos 2.6, veja também udev )
A maioria dos programas e processos (incluindo login
, bash
, getty
, cron
, atd
, mysqld
) são todos descendentes de init
com fork
& %código%
Você basicamente pode ignorar as exceções (como execve
), e você poderia ter um sistema Linux no qual cada processo é descendente de hotplug
(esse era o caso dos kernels Linux 1.x no século anterior). Use pstree (1) para ver a árvore de processos.
Leia a página sobre processo de inicialização do Linux & Do Prompt do PowerUp to Bash (que pode ser um pouco desatualizado, mas a maioria ainda é verdade).
setuid é um mecanismo inteligente relacionado a privilégios (veja também setreuid(2) , credenciais (7) , capacidades (7) , < href="http://man7.org/linux/man-pages/man7/namespaces.7.html"> namespaces (7) ).
Eu recomendo a leitura da Programação Avançada do Linux em primeiro lugar. Alguns poucos recursos ou syscalls apareceram depois desse livro (por exemplo, signalfd (2) , inotify (7) , epoll (7) ....).