2012-08-16 21 views

Respuesta

4

Bien puede utilizar DefaultExecutor de Apache Commons Exec biblioteca para ejecutar comandos, pero internamente usa java.lang.Runtime y java.lang.Process.

Le sugiero que utilice esta biblioteca en tiempo de ejecución porque las API de ejecución de comandos de Apache son más sofisticadas y ofrecen todas y más características que Java Runtime. También maneja los valores de salida.

+0

¿Maneja el problema de bloqueo como se detalla en este comentario - http://stackoverflow.com/a/5483880/537503? –

0

Hay varias maneras posibles; pero no puedo llamar a ninguno de ellos deseable sin entender tu motivación.

Por ejemplo, escriba un programa en C o Perl o en cualquier idioma y escúchelo en un socket. Su programa Java puede conectarse al socket y enviar un mensaje con el nombre del programa para generar, argumentos, etc. El programa del receptor puede continuar y generar esto.

+0

bien, así que la idea es crear una aplicación de servidor Java que responda a comandos básicos como ls, pwd, cd, etc. – tosi

0

Hay dos formas de ejecutar los comandos Unix:

  1. Puede utilizar java.lang.Runtime y java.lang.Process
  2. Puede usar JNI/JNA acceder a bibliotecas compartidas. Por lo tanto, podría usar esto para acceder a los comandos de nivel del sistema operativo para crear un proceso (system() y exec*() en Unix).

No se recomienda el segundo enfoque: Es difícil hacerlo bien y, finalmente, el resultado final será con algo que tiene exactamente la misma funcionalidad que Runtime.exec()

Si sólo necesita la funcionalidad, a continuación, puedes implementar los comandos nuevamente en Java. Por ejemplo, para implementar ls, use File.listFiles()

Cuestiones relacionadas