Salta el contingut
 

Exercicis: Programació de processos

Autor: Joan Puigcerver Ibáñez

Correu electrònic: j.puigcerveribanez@edu.gva.es

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Objectius

Conèixer i ser competent en el desenvolupament d'aplicacions que gestionen la comunicació entre processos.

Observacions

En aquest exemple s'utilitza un script de Bash, per tant, cal executar-lo mitjançant el Windows Subsystem for Linux (WSL).

Tot el codi font ha d'estar en el package ud1.exercises.

1. LaunchApplications

Crea el programa LaunchApplications que inicie les teues aplicacions preferides (navegador, reproductor de música, etc.).

2. ConsumeLineMultiProcess

Crea el programa ConsumeLineMultiProces que llance múltiples processos utilitzant el programa consume_line.sh en diferents configuracions.

consume_line.sh
#!/bin/bash

FILENAME=$1
i=0
DELAY=1

if [ $# -gt 1 ]; then
    DELAY=$2
fi

cat $FILENAME | while read line 
do
    echo "Process $$ - Line $i: $line"
    ((i++))
    sleep $DELAY
done

Aquest script:

  • Llegeix les línies d'un fitxer de text especificat com a primer argument ($1).
  • Mostra per stdout cada línia llegida per pantalla, amb un retard de temps en segons, especificat com a segon argument ($2).

Per redirigir el stdout del subprocés al procés principal, podem utilitzar la funció ProcessBuilder inheritIO().

Crea els processos amb consume_line.sh amb els següents paràmetres:

Important

Situa tots els fitxers al directori CognomNom-PSP/files/ud1/

Info

Per cridar a aquest script, l'heu d'indicar la ruta com a programa en els paràmetres del constructor ProcessBuilder.

ProcessBuilder pb1 = new ProcessBuilder(
        "wsl.exe",
        "files/ud1/consume_line.sh",
        "files/ud1/colors.txt",
        "3"
    ).inheritIO();

El programa principal ha d'esperar a que tots els processos acaben. Aleshores, mostrarà un missatge indicant que tots els processos han acabat.

System.out.println("Tots els processos han acabat.");

3. PingProcess

Crea el programa PingProcess que execute la comanda ping sobre un host determinat amb un nombre de pings determinat.

El programa demanarà per teclat el nom del host i el nombre de pings a enviar.

El programa principal iniciara el procés ping utilitzant la següent sintaxi:

ping -c <num_pings> <host>

El programa principal ha d'esperar a que el procés ping acabe, i mostrarà la següent informació:

  • Codi de retorn del procés.
  • Eixida estàndard i d'error del procés.

Comentaris