Leia credenciais (7) , fork(2) , execve (2) . A chamada do sistema bifurcado é a forma como os processos são criados (hoje, fork
é frequentemente implementado com clone (2) mas você pode ver isso como um detalhe de implementação). A chamada do sistema exec é o caminho executável programas são iniciados. Lembre-se de que tudo é feito a partir de algum processo com algumas chamadas de sistema (listadas em syscalls (2) ). O primeiro processo ( init ou systemd ) foi iniciado magicamente pelo kernel no momento da inicialização. Outros processos foram iniciados por fork (2) . Kernels Linux modernos às vezes - mas raramente - iniciam magicamente alguns processos especiais (por exemplo, /sbin/hotplug
) ou encadeamentos do kernel (por exemplo, kworker
, kswapd
....).
Então, sim, todo processo (e todo arquivo) tem algum dono (tecnicamente o uid , um pequeno número não negativo) e grupo (o gid). O 0 uid é para root e tem permissões extras.
Leia também sobre setuid (e setreuid (2) ...) É complicado.
does it mean the other owner cannot run that process?
Um processo já está em execução (mas pode estar ocioso ou aguardar), para que ninguém possa executá-lo novamente. Não confunda um processo (algo dinâmico) com o programa (um arquivo executável , frequentemente em formato ELF em execução dentro dele.
Um determinado programa (por exemplo, /bin/bash
) pode ser executado em vários processos. Muitos executáveis ficam no seu disco sem ter (em um determinado instante) nenhum processo executando-os.
No Linux, proc (5) é muito útil para consultar o kernel sobre o estado dos processos. Experimente os exemplos cat /proc/$$/status
e cat /proc/self/maps
. Veja também pgrep (1) , ps (1) , topo (1) .
Cada processo tem seu próprio espaço de endereço virtual , seu próprio descritor de arquivos tabela, seu próprio diretório de trabalho , (e frequentemente vários < href="https://en.wikipedia.org/wiki/Thread_(computing)"> tópicos , veja pthreads (7) ) etc etc ...
does it mean that other owners cannot run/kill/resume that process?
A execução de um processo não faz sentido (já está /proc/1234/exe , e você pode usá-lo para execve (2) - mas você provavelmente não deve -. As regras de permissão para execve
se aplicam.
Para matar (2) um processo, você geralmente deve ter o mesmo uid . No entanto, a documentação informa:
For a process to have permission to send a signal, it must either be privileged (under Linux: have the CAP_KILL capability in the user namespace of the target process), or the real or effective user ID of the sending process must equal the real or saved set-user-ID of the target process. In the case of SIGCONT, it suffices when the sending and receiving processes belong to the same session.
Para parar um processo, use o sinal SIGSTOP
(ou SIGTSTP
) usado com kill (2) . Veja sinal (7) .
Para retomar um processo parado, use o sinal SIGCONT
.