Que vantagens o fork em sistemas unix?

Qual é a diferença do simples lançamento de **** > /dev/null &?


Answers 4:

Share:


Cooper Stuart
Answer 1

De nada. É apenas um conceito antigo e obsoleto, a continuidade por causa de compatibilidade. Single Unix Specification diz o seguinte:

There are two reasons why POSIX programmers call fork(). One reason is to create a new thread of control within the same program (which was originally only possible in POSIX by creating a new process); the other is to create a new process running a different program. In the latter case, the call to fork() is soon followed by a call to one of the exec functions.

Ou seja, literalmente, fork-e, existem duas aplicações: a criação de um novo processo a partir de uma nova бинарника e a criação de um novo "fluxo", no âmbito do processo em curso. Em ambos os casos, ele tem falhas que ocorrem a partir do princípio de fork-e:
1) Quando um processo é criado o primeiro é copiado para o espaço de endereçamento (não a memória, mas é o espaço de endereçamento de cada processo é, em qualquer caso, a sua), os descritores e outros recursos, de modo que imediatamente libertá-los (este problema é parcialmente resolvido vfork-ω)
2) Quando você cria um fluxo mais uma vez copiado para o espaço de endereçamento em vez de desempenho no mesmo.

Me vem à mente a única aplicação, a qual pode ser útil: a criação de sandboxes a-la Chrome/IE7. A criação de um novo processo de copiar o antigo será um par de milhões (alguns milissegundos em processadores modernos) ciclos de clock mais barato — para quem é importante a criação de sandbox em grandes quantidades e por algum motivo "префорк" um conjunto de tais sandbox não é adequado), isso pode ser significativo.

Há um outro problema, além de relativamente pequena queda de desempenho de dois dos mais utilizados cenários. Eis como descreve o problema ainda é a mesma do SUS:
The general problem with making fork() work in a multi-threaded world is what to do with all of the threads. There are two alternatives. One is to copy all of the threads into the new process. This causes the programmer or implementation to deal with threads that are suspenso on system calls or that might be about to execute system calls that should not be executed in the new process. The other alternative is to copy only the thread that calls fork(). This creates the difficulty that the state-of-process-local resources is usually held in process memory. Se um thread that is not calling fork() holds a resource resource that is never released in the child process because the thread, cujo job it is to release the resource does not exist in the child process.


De concepção moderna, já é bastante importante conceito, como a continuidade. Assim, a tradicional юникс-o processo tem a menor consistência. Ele é, simultaneamente, um recipiente de recursos (simplificando, pode-se dizer que é uma abstração de memória) e uma unidade de execução (abstração do processador).
Posix thread-s são chamados para resolver esse problema, mas não são compatíveis com o fork. De modo que, para melhor desfrutar da abordagem descrita tudo na mesma SUS:
When a programmer está escrevendo um multi-threaded program, the first described use of fork(), creating new threads in the same program is provided by the pthread_create() function. The fork() function is thus used only to run new programs, and the effects of the calling functions that require certain resources between the call to fork() and the call to an exec function está indefinido.

Usar форком APENAS para executar um novo programa, para tudo o resto para desfrutar de pthread_create.


ian dalton
Answer 2

Posso estar errado, mas a minha opção "**** > /dev/null &" receberá um SIGHUP ao precipício de terminal


Bibin Alias
Answer 3

Transferência de estado, como espécie.


Zakiyyah Mateen
Answer 4

muito ideologicamente clara a idéia de bifurcação do processo de