Estoy intentando ejecutar un comando simple usando Java 1.8 y el programa se ejecuta sistema operativo Solaris 11. Mis bajo un usuario en particular y el comando debe ejecutarse en superusuario
Este es el comando:
Runtime.getRuntime().exec("su - root -c 'pargs -l 1111'");
Si me quedo en el comando deberá su excelente trabajo y pido contraseña y wen i Introduzca la contraseña voy a obtener el resultado.
el problema es wen lo funciono en Java aquí es mi código
Process proc = Runtime.getRuntime().exec("su - root -c 'pargs -l 1111'");
PrintWriter out = new PrintWriter(new OutputStreamWriter(proc.getOutputStream()));
out.println(password);
out.flush();
int exitCode= proc.waitFor();
System.out.println(exitCode);//exitCode = 1
BufferedReader pArgs= new BufferedReader( new InputStreamReader(proc.getInputStream()));
if((line=pArgs.readLine()) != null)
{
//do something
}
else
{
//something not working = ERROR
}
Creo que la línea igual a cero porque algo en el conjunto de la contraseña no es correcta bate no estoy seguro
lo que estoy haciendo mal?
Muchas gracias por todas las respuestas. Pero mi solución fue un poco diferente. Se decidió utilizar un archivo externo que podrían ser escritos y leídos de ambos procesos. Todo el objetivo era hacer un apretón de manos de nuevo en caso de que el proceso que se ejecuta en la raíz caerá (watchdog).
Así que ahora no hay necesidad de utilizar el comando
Runtime.getRuntime().exec("su - root -c 'pargs -l 1111'");
Cuando el proceso de raíz comienza a funcionar, se registra un compás en un archivo. y si el proceso del usuario (que lee el archivo cada X tiempo) determina que la firma ha cambiado, que va a hacer un apretón de manos de nuevo.