Por que o terminal pode desinstalar-se?

25

captura de tela

Como apt-get remove xtermpassa? E depois de desinstalado, xtermnão fecha e continua a funcionar normalmente.

O xtermprocesso é armazenado em cache na RAM enquanto está em execução?

Huey
fonte
6
Para ser exato, ele não está realmente desinstalando - apt-getestá desinstalando xterme não tem idéia de que de alguma forma depende de um xtermprocesso - então é sobre "Por que o xterm pode ser desinstalado durante a execução?". Boa pergunta.
Volker Siegel
2
É semelhante a como você pode excluir o disco rígido enquanto executa o sistema operacional.
Jkd
released: stackoverflow.com/questions/3356483/…
DarioP 17/06/15

Respostas:

53

Nem tanto. O arquivo já está aberto pelo programa. Excluir o arquivo (e substituí-lo por outra versão) não afeta o programa em execução porque o arquivo original é mantido aberto (embora sem um nome no disco para abri-lo novamente) até que o programa seja concluído. Somente quando todos os identificadores do arquivo estão fechados, seus blocos de dados no disco são liberados. Até então, o arquivo aberto pode ser lido e gravado como normalmente - a única mudança é que ninguém mais pode abri-lo, pois seu nome foi removido.

Enquanto partes do programa já podem ter sido lidas no RAM quando são excluídas, elas ainda podem ser descartadas e relidas posteriormente, ou novas partes do programa que não foram executadas anteriormente ainda podem ser carregadas do arquivo excluído.

psusi
fonte
4
Esta é a razão real .... esta é também a razão pela qual rm -rf /obras .....
heemayl
6
Se você quiser usar a palavra "funciona" para descrever com sucesso, estragar tudo totalmente. ;) É interessante notar que rm -rf /não vai funcionar se você tentar executá-lo uma segunda vez logo depois;)
thomasrutter
1
Eu sempre vi "/ some / file / name (deleted)" na lsofsaída e sei que é como um arquivo 'zombie' se parece ... mas existe alguma maneira de salvar o conteúdo desse arquivo de desaparecer quando o último identificador de arquivo morre?
Kilian Foth
1
@KilianFoth, se você puder encontrar um processo que ainda tenha o arquivo aberto, poderá copiá-lo de / proc / $ PID / fd / $ ID para outro arquivo, mas não consigo encontrar uma maneira de recuperar o arquivo no local, pois todas as tentativas de vincular o arquivo com falha.
Psusi
3
@KilianFoth Se houver um identificador de arquivo, rootpoderá criar um nome para ele (e, assim, impedir a exclusão) usando a linkatchamada de sistema. Mas os executáveis ​​e as bibliotecas são mapeados na memória, o que não requer um identificador de arquivo. Não conheço nenhuma maneira de manipular um arquivo que só existe porque é mapeado na memória. Embora os executáveis ​​possam ser acessados /procenquanto estão em execução, apenas as bibliotecas e outros arquivos mapeados na memória podem estar além da recuperação. Se você quiser mais detalhes sobre isso, faça-o como uma pergunta separada.
kasperd
8

O xtermprocesso é armazenado em cache na RAM enquanto está em execução?

Exatamente. É semelhante ao processo que permite que você instale atualizações nas coisas enquanto elas estão sendo executadas sem elas travarem. E também por que você precisa reiniciar os serviços depois de atualizá-los. Uma vez que algo está sendo executado, seu binário está na memória.

Se depender de outros arquivos (que não estejam em um estado "aberto" retido) que sejam removidos ou substituídos, isso poderá causar problemas, mas para algo tão discreto quanto xtermisso não é um problema.

Oli
fonte
6
Não exatamente .. partes do programa são lidas na memória somente quando necessário e podem ser descartadas a qualquer momento para liberar memória para outros usos, e, portanto, precisarão ser lidas novamente mais tarde (quando o programa tentar acessar essas partes novamente ).
Psd #
17
Não é necessariamente na RAM. Mas os arquivos não são realmente excluídos até que não sejam abertos, incluindo o executável xterm.
user253751
@immibis, portanto, a minha resposta;)
psusi
2

Na verdade, é uma característica de como os computadores funcionam: quando um programa é chamado, ele é realmente carregado na memória e funciona a partir daí.

Um arquivo realmente funciona da mesma maneira. Para evitar problemas, muitos arquivos nos sistemas UNIX-ish criam bloqueios.

O enigma real é por que você não pode fazer coisas semelhantes e semelhantes no Windows.

Esse recurso é realmente o que permite atualizar todo o sistema, incluindo os programas ativos em seu sistema. ;)

runlevel0
fonte
+1 em "a inatividade real é o motivo pelo qual você não pode fazer coisas semelhantes no Windows"
arielf 19/06/2015