NUCLI 3 · Sessió 1 · L'entorn i el primer procés fill
ServiHub v0
Sistema a restaurar: Llançador de processos fills
- Alerta
- Manual
- Reptes
- Mòdul
Aquest nucli ja està en marxa. Pots tornar-lo a jugar per repassar, però la puntuació desada no canviarà.
Manual del nucli
0 / 2Desbloqueja les 2 pàgines del manual per obrir els reptes. Llegeix-les bé: els reptes en pregunten els detalls.
L'entorn del mòdul
- Java 21 (JDK LTS): el llenguatge de tot el mòdul.
- IntelliJ IDEA: l'editor. Executes una classe amb el triangle verd ▶ al costat del
main. - Maven: organitza el projecte i les dependències. El projecte és
cat.pratfp:servihub, amb el fitxerpom.xmla l'arrel i el codi asrc/main/java. - Git i el repositori del mòdul a GitHub, amb un paquet per sessió:
cat.pratfp.servihub.sessio1,sessio2…
ServiHub és el fil conductor: una plataforma de serveis que creix versió a versió. La v0 llança un procés; la v1 (PR1) en llançarà molts.
App.java, tros a tros
El primer programa del mòdul: un procés Java que en llança un altre (java -version), en llegeix el que escriu i n'obté el codi de retorn.
public static void main(String[] args) throws IOException, InterruptedException {
System.out.println("Sóc el procés " + ProcessHandle.current().pid());
ProcessBuilder pb = new ProcessBuilder("java", "-version");
pb.redirectErrorStream(true);
Process p = pb.start();
System.out.println("He llançat el procés " + p.pid());
try (BufferedReader lector = new BufferedReader(new InputStreamReader(p.getInputStream()))) {
String linia;
while ((linia = lector.readLine()) != null) {
System.out.println(" fill> " + linia);
}
}
int codi = p.waitFor();
System.out.println("Codi de retorn: " + codi);
}| Fragment | Què fa |
|---|---|
throws IOException, InterruptedException | start() pot fallar si el programa no existeix (IOException) i waitFor() es pot interrompre mentre espera (InterruptedException). |
ProcessHandle.current().pid() | El PID del nostre propi procés, el pare. |
new ProcessBuilder("java", "-version") | Prepara l'ordre. L'executable i cada argument van separats, mai en una sola cadena. |
pb.redirectErrorStream(true) | java -version escriu per la sortida d'error. Així la fusionem amb l'estàndard i la llegim per un sol flux. |
Process p = pb.start() | Ara sí que es crea el fill. A partir d'aquí hi ha dos processos vius. |
p.getInputStream() | Des del pare, és el flux per LLEGIR el que el fill escriu. |
while ((linia = lector.readLine()) != null) | Llegeix fins que el fill tanca la sortida (readLine torna null). |
int codi = p.waitFor() | Espera que el fill acabi i en retorna el codi. Va DESPRÉS de llegir: si el fill omple la memòria intermèdia i ningú no la buida, es bloqueja. |
Nucli restaurat · Llançador de processos fills
ServiHub v0 restaurat: el pare torna a llançar el seu fill i en recull el codi.
- XP
- 0
- Bonus ratxa
- 0
- Errors
- 0
- Pistes
- 0
- Estrelles
- ☆☆☆
Anota la lletra i la seva posició: al kernel hauràs de compondre l'ordre de reinici.