Processar a inicialização após a inicialização

2

Eu sei o seguinte são maneiras de começar os processos no Linux

  • do init.d (ou similar)
  • do shell (pelo usuário)
  • bifurcado por um daemon nativo em execução

É sempre possível no Linux que um processo seja iniciado e não se enquadre nas categorias acima? Por exemplo, um processo poderia ser iniciado sem o conhecimento do usuário?

    
por Jake 28.06.2015 / 07:59

1 resposta

8

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 passar init=/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) ....).

    
por 28.06.2015 / 08:30

Tags