Execució de comandes del sistema operatiu des de Java

Des de Java podem executar comandes en un subprocess en la shell del sistema operatiu.

Referències:

, , , , , , ,

Codi d'exemple

Donem un timout de 5 segons perquè la comanda s'executi, després la matem si encara no ha acabat (a l'exemple justament hem posat una comanda tail -f /var/log/syslog que no acaba mai i bloqueja el procés per sempre).

jcmd.java
import java.util.concurrent.TimeUnit;
import java.lang.Runtime;
import java.lang.Process;
 
class jcmd
{
    public static void main(String args[])
    {
        System.out.println("Iniciant comanda...");
 
        String cmd[] = {"tail","-f","/var/log/syslog"};
 
        try {
            // objecte global Runtime
            Runtime rt = java.lang.Runtime.getRuntime();
 
            // executar comanda en subprocess
            Process p = rt.exec(cmd);
            // donem un temps d'execució
            TimeUnit.SECONDS.sleep(5);
            // el matem si encara no ha acabat
            if( p.isAlive() ) p.destroy();
            p.waitFor();
            // comprovem el resultat de l'execució
            System.out.println("Comanda 1 exit code="+p.exitValue());
 
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        // finish
        System.out.println("Comandes finalitzades.");
    }
}