[JAVA] Fork java

Pubblicità

Alessandro001

Utente Attivo
Messaggi
166
Reazioni
7
Punteggio
44
Salve, ho intenzione di usare la fork() in java ma non so bene, dopo la fork, come capire in quale processo mi trovo?
Ho trovato una dispensa secondo la quale invoke è il figlio ed execute è padre
È corretto?
 
Ultima modifica:
Esiste la fork in Java? E' la prima volta che lo sento.

In Java si usano:

1. Runtime.exec https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Runtime.html
2. ProcessBuilder che offre delle cose in piu' https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/ProcessBuilder.html
3. infine c'e' il framework Fork/Join ( da non confondere con la fork di Unix ) https://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html

L'ultimo e' decisamente ipercomplicato per usi normali. Imho utilizza Runtime.exec e risparmi tempo e mal di testa.

Il problema che ponevi e' relativo alla semantica della fork di Unix, che pero' non e' la stessa in Java. Cioe' Unix forka un processo, ovvero prende il padre, ne fa una copia e la manda in esecuzione. A questo punto, quale dei due cloni sa di essere il padre? Cioe' sono cloni, dal loro punto di vista ognuno e' il padre.

Ed e' qui che la fork fa la sua magia. Ovvero restituisce il valore di ritorno 0 al figlio, un valore maggiore di 0 ( che poi e' il PID del figlio ) al padre. In caso di errore, restituisce solo un valore minore di 0 al padre.

Cioe' immagina il clone e il padre che, dopo la fork, continuano come prima ( e hanno le stesse istruzioni al loro interno ). Il programmatore mette un if

C:
pid = fork();

if (pid == 0) {
    // sono il figlio
} else {
    // sono il padre
    // controllo anche che se PID < 0 allora il figlio non e' stato creato
    // e c'e' stato un errore
}

Ma in Java non accade niente di tutto questo. Quelle funzioni creano un nuovo processo ( figlio, ma pure il termine non e' che sia corretto al 100% ) e lo usano per eseguire un altro programma, specificato dal programmatore. Ma in nessun caso il figlio e' un clone del padre. E quindi viene proprio meno la necessita' di fare quel controllo di cui sopra.

p.s. la dispensa cosa intende per invoke ed execute?
 
Grazie della risposta, una domanda, attraverso quale sintassi è possibile avviare un programma all'interno di un altro?
 
Dipende dal linguaggio, dal sistema operativo e dal livello di controllo che si vuole avere sul programma avviato. Devi essere più specifico, magari con un caso particolare.
 
Pubblicità
Pubblicità

Discussioni Simili

Indietro
Top