Newsgroup: it.comp.programmare
Titolo: lancio programma

Ciao a tutti
spero di non essere OT ma non sapevo dove postare questo dubbio.
Ho fatto un programma di calcolo in fortran sotto linux che viene
lanciato da linea di comando.
L'esecuzione puo durare anche parecchi minuti.Ho notato che se, mentre
e' in esecuzione in codice, cancello dal disco l'eseguibile, il codice
comunque viene eseguito e non si interrompe(ho fatto anche altre prove
con altri programmi in C). Questo perche al momento del lancio tutto
il codice viene caricato? oppure e' stata solo una coincidenza?
grazie a chi puo' chiarirmi questo dubbio
Davide

Seth ha scritto:

A parte la bizzarria del voler cancellare un file eseguibile, mentre 
questo e' in esecuzione, in linea di massima il sistema operativo si 
carica tutto in memoria (se questa e' sufficiente) permettendo di 
cancellarne l'immagine su disco.
Se parliamo di eseguibili compilati.
Se invece si tratta di un eseguibile interpretato, dipende 
dall'interprete, che potrebbe caricarsi in memoria tutto il file oppure 
leggerlo man mano, nel qual caso, se lo cancelli, va in errore.
Se invece la memoria non fosse sufficiente, interviene lo swap file e in 
quel caso non ricordo che cosa possa succedere.
Del resto non e' che uno vada tutti i giorni a cancellare gli eseguibili 
mentre questi sono in esecuzione.

questo e' in esecuzione,
Perché mai bizzarria?

 mentre questi sono in esecuzione.
Vero solo a metà.
Nei filesystem, quando si cancella un file, il file rimane sul disco.
Quello che viene cancellato è solo la sua entry (gli inode nel caso di 
filesystem Unix).
Unix, inoltre, quando apri un file, legge tutte le informazioni relative 
a quel file. Quando il file viene cancellato, esso non è più visibile 
dal sistema, ma il programma che lo ha aperto lo può continuare ad usare 
fino alla sua terminazione. Infatti è pratica comune, quando serve un 
file temporaneo che nessun altro possa scrivere o leggere, aprire un 
file sul filesystem e cancellarlo immediatamente. Il programma può 
continuare ad utilizzarlo e il gestore del filesystem non lo sovrascrive 
fintanto che non viene chiuso.
Ulteriore prova è il fatto che alcuni file di log (ad esempio quelli di 
apache) che vengono aperti all'avvio del demone e chiusi solo 
all'arresto dello stesso, quando vengono fatti "ruotare", necessitano 
della riavvio del demone, altrimenti il demone continuerebbe a scrivere 
su disco su un file cancellato. Nulla verrebbe sovrascritto, ma il log 
sarebbe inaccessibile (e quindi inutile) e comunque considerato spazio 
libero alla chiusura del demone stesso.
Diverso se apri un file e ci scrivi dentro (o fai una truncate), come ad 
esempio usando il comando
echo > nomefile
che di fatto azzera il contenuto di nomefile
LP

Andrea Laforgia ha scritto:

Be', non mi pare che rientri nell'utilizzo comune di un programma, il 
lanciarlo e poi cercare di cancellarlo prima che questo finisca
(tutto sommato anche tentare di cancellarlo dopo che ha finito non e' 
azione consueta).
Si suppone che se tu abbia un file eseguibile, lo conservi nella 
directory degli eseguibili sotto path, per conservarlo meglio e averlo 
comunque a disposizione.


Non nell'utilizzo comune, ok, ma in alcuni casi può essere sensato.
LP

comunque a disposizione.
Ma in alcuni casi può servire che un eseguibile si
cancelli/sovrascriva da solo (per esempio se si sta aggiornando con
una nuova versione).

 leggerlo man mano, nel qual caso, se lo cancelli, va in errore.
grazie intanto a tutti per le risposte.
Si tratta di un eseguibile compilato.
ma cosa intendi esattamente per "eseguibile interpretato"??

 ma cosa intendi esattamente per "eseguibile interpretato"??
In unix un eseguibile č in buona sostanza qualunque cosa possa essere
eseguita. Che sia un programma in elf (se parliamo di linux) o uno
script di bash non cambia nulla.
Strettamente parlando del bytecode Java (o un file Python senza x bit
set, sia in formato sorgente che in pyc) non sarebbero degli eseguibili,
ma sono comunque programmi che possono essere eseguiti. Per cui in senso
lato sono eseguibili pure loro.
-- 
blog:  
http://www.akropolix.net/rik0/blogs
 | Uccidete i filosofi,
site:  
http://www.akropolix.net/rik0/
      | tenetevi riso e
forum: 
http://www.akropolix.net/forum/
     | bacchette per voi.