Dlaczego terminal może się odinstalować?

25

zrzut ekranu

Jak to działa apt-get remove xterm? Po odinstalowaniu xtermnie zamyka się i nadal działa normalnie.

Czy xtermproces jest buforowany w pamięci RAM podczas działania?

Huey
źródło
6
Mówiąc dokładniej, tak naprawdę nie odinstalowuje się sam - apt-getodinstalowuje xtermi nie ma pojęcia, że ​​w jakiś sposób zależy od xtermprocesu - więc chodzi o „Dlaczego Xterm można odinstalować podczas działania?”. Fajne pytanie.
Volker Siegel,
2
Jest to podobne do sposobu usuwania dysku twardego podczas działania systemu operacyjnego.
jkd

Odpowiedzi:

53

Nie do końca. Plik jest już otwarty przez program. Usunięcie pliku (a następnie zastąpienie go inną wersją) nie wpływa na działający program, ponieważ oryginalny plik jest utrzymywany jako otwarty (choć bez nazwy na dysku, aby go ponownie otworzyć), dopóki program się z nim nie skończy. Dopiero po zamknięciu wszystkich uchwytów pliku zwolnione zostają jego bloki danych na dysku. Do tego czasu otwarty plik można odczytywać i zapisywać jak normalnie - jedyną zmianą jest to, że nikt inny nie może go otworzyć, ponieważ jego nazwa została usunięta.

Chociaż części programu mogły już zostać wczytane do pamięci RAM po ich usunięciu, nadal mogą zostać odrzucone i ponownie odczytane później, lub nowe części programu, które nie zostały wcześniej uruchomione, mogą być nadal ładowane z usuniętego pliku.

psusi
źródło
4
To jest faktyczny powód ... to także powód, dla którego rm -rf /działa .....
heemayl
6
Jeśli chcesz użyć słowa „działa”, aby opisać z powodzeniem wszystko schrzanić. ;) Co ciekawe, rm -rf /nie zadziała, jeśli spróbujesz uruchomić go drugi raz zaraz potem;)
thomasrutter
1
Często widziałem „/ some / file / name (usunięte)” na lsofwyjściu i wiem, że tak właśnie wygląda plik „zombie” ... ale czy istnieje jakiś sposób na zapisanie zawartości takiego pliku przed zniknięciem kiedy umiera ostatni uchwyt pliku?
Kilian Foth,
1
@KilianFoth, jeśli możesz znaleźć proces, który nadal ma otwarty plik, możesz skopiować go z / proc / $ PID / fd / $ ID do innego pliku, ale nie mogę znaleźć sposobu na odzyskanie pliku w miejscu, ponieważ wszystkie próby twardego połączenia pliku kończą się niepowodzeniem.
psusi
3
@KilianFoth Jeśli istnieje uchwyt pliku, rootmoże być w stanie utworzyć dla niego nazwę (a tym samym zapobiec usunięciu) za pomocą linkatwywołania systemowego. Ale pliki wykonywalne i biblioteki są mapowane w pamięci, co nie wymaga uchwytu pliku. Nie znam żadnego sposobu na uchwycenie pliku, który istnieje tylko dlatego, że jest zmapowany w pamięci. Chociaż pliki wykonywalne są dostępne /procpodczas ich działania, więc tylko biblioteki i inne pliki mapowane w pamięci mogą być niemożliwe do odzyskania. Jeśli chcesz uzyskać więcej informacji na ten temat, zadaj to jako osobne pytanie.
kasperd
8

Czy xtermproces jest buforowany w pamięci RAM podczas działania?

Dokładnie. Jest podobny do procesu, który pozwala instalować aktualizacje rzeczy podczas ich działania bez awarii. A także dlaczego musisz ponownie uruchomić usługi po ich aktualizacji. Gdy coś działa, jego plik binarny jest w pamięci.

Jeśli zależy to od innych plików (które nie są w stanie wstrzymania „otwarcia”), które są usuwane lub zastępowane, może to powodować problemy, ale w przypadku czegoś tak dyskretnego jak xtermnie jest to problem.

Oli
źródło
6
Niezupełnie ... części programu są wczytywane do pamięci tylko w razie potrzeby i mogą zostać w dowolnym momencie odrzucone w celu zwolnienia pamięci do innych zastosowań, dlatego też trzeba będzie ją ponownie wczytać później (gdy program spróbuje uzyskać dostęp do tych części jeszcze raz ).
psusi
17
To niekoniecznie jest w pamięci RAM. Ale pliki nie są tak naprawdę usuwane, dopóki nie zostaną otwarte, w tym plik wykonywalny xterm.
user253751
@immibis, stąd moja odpowiedź;)
psusi
2

W rzeczywistości jest to cecha działania komputerów: gdy program jest wywoływany, jest rzeczywiście ładowany do pamięci i stamtąd działa.

Plik faktycznie działa w ten sam sposób. Aby uniknąć problemów, wiele plików w systemach UNIX tworzy blokady.

Prawdziwa zagadka polega na tym, że nie można robić takich i podobnych rzeczy w systemie Windows.

Ta funkcja umożliwia aktualizację całego systemu, w tym programów aktywnych w systemie. ;)

runlevel0
źródło
+1 za „faktyczne bezczynność powoduje, że nie można robić takich i podobnych rzeczy w systemie Windows”
arielf