Exec di Processi
I comandi eseguiti da un programma Go ereditano l'ambiente del processo Go in esecuzione.
La funzione LookPath()
ricerca nel PATH un comando non qualificato.
Se lo trova lo registra in un oggetto, altrimenti torna un errore.
E' l'equivalente del comando Unix which
.
(630execing-processes.go):
package main
import "syscall"
import "os"
import "os/exec"
func main() {
// Registrazione del comando con ricerca
// nel $PATH se necessario
binary, lookErr := exec.LookPath("ls")
if lookErr != nil {
panic(lookErr)
}
// Vettore di esecuzione
args := []string{"ls", "-a", "-l", "-h"}
// Ambiente
env := os.Environ()
// System call che esegue il comando
execErr := syscall.Exec(binary, args, env)
if execErr != nil {
panic(execErr)
}
}
Si può eseguire un comando anche con una System call a basso livello tramite il package syscall
, con la funzione Exec()
.
Invoca la system call execve()
del linguaggio C, e il suo comportamento è uguale.
Questa ha bisogno di tre argomenti:
- il comando
- la lista degli argomenti
- l'ambiente
Il comando è un oggetto.
La lista degli argomenti è una slice di stringhe, i token del vettore di lancio, ed include il comando stesso.
L'ambiente è una slice di stringhe, come visto in precedenza.