Red de conocimiento informático - Aprendizaje de programación - proceso java monitor linux java monitor linux

proceso java monitor linux java monitor linux

¿Java llama al script de shell en Linux?

Recientemente, basado en la práctica laboral, compartí un artículo sobre cómo llamar al Shell en Java. Espero que sea útil para todos. El contenido es el siguiente.

"Java más Shell es igual a vino tinto más café"

En química, sabemos que "el hidrógeno y el oxígeno se encienden para producir agua".

En la vida entendemos que "los buenos momentos y los hermosos paisajes no se encuentran en el cielo, y el placer sólo se puede encontrar en la casa de alguien".

¿Qué pasa con la tecnología? Comencemos con un escenario hipotético: BOSS requiere que configure una sala de comando para monitorear el servicio, para poder ver el espacio restante en disco de cada servidor y poder ver…. Puedo ver.

En realidad, para ser honesto, hay muchas ideas por implementar, pero no importa si un gato negro o un gato blanco puede atrapar ratones, es un buen gato. Hoy intentaremos usar Java y. Shell para ver si habrá alguna reacción inesperada.

1. Primero, pruebe una copa de vino Runtime a través del código fuente JDK.

La imagen de arriba es un extracto de parte del código fuente de JDK Runtime, que se divide principalmente en cuatro segmentos de código principales para brindarle una comprensión aproximada.

En el primer fragmento de código, puede ver que la construcción Runtime está privatizada, proporciona propiedades estáticas, crea instancias de objetos por adelantado y proporciona métodos estáticos para acceder a las instancias. ¿Se utiliza el patrón de diseño singleton? Cuando el entrevistador volvió a preguntar sobre los patrones de diseño, lo tomó y lo roció salvajemente.

El segundo segmento de código es principalmente el método addShutdownHook(), que agrega un gancho de apagado. Para decirlo sin rodeos, en realidad permite a los desarrolladores insertar un fragmento de código para detener la ejecución en la JVM. Por ejemplo, al construir un marco de servicio, dicho escenario es muy útil cuando se enfrenta a la necesidad de completar un cierre ordenado, limpiar el campo de batalla, liberar recursos, etc. Entre ellos, ShutdownHook se puede ver en Tomcat, Jetty y otros contenedores.

Runtimeruntime=Runtime.getRuntime();

runtime.addShutdownHook(newThread(){

@Override

public voidrun() {

System.println("Limpiar el campo de batalla, liberar recursos, completar la detención ordenada del servicio");

}

}});

System.out.println("El inicio del servicio está completo");

El código se ejecuta de la siguiente manera.

Inicio del servicio completado

Limpiar el campo de batalla, liberar recursos y completar la parada elegante del servicio

El tercer fragmento de código muestra principalmente una serie de funciones proporcionadas por JDK para Runtime El método de sobrecarga ejecutiva es el foco de este intercambio. Los eventos principales se discutirán al final.

El cuarto código son principalmente algunas API proporcionadas por Runtime para acceder a la información del sistema. Simplemente deseche el código y tómelo.

format("Núcleo de CPU local disponible de JVM %d", runtime.availableProcessors() ));

/ El valor predeterminado es 1/4 del sistema

System.out.println( String. format("Espacio de memoria máximo disponible %dM",runtime.maxMemory()/1024/1024));

/Por defecto es 1/4 del sistema

/ 64 del sistema

System.out.println(String.

System.out.println(String.format("espacio de memoria libre %dM",runtime.totalMemory()/ 1024 /1024));

System.out.println(String.format("espacio de memoria libre %dM",runtime.totalMemory());

System.out.println ( String.format("espacio de memoria libre %dM",runtime.totalMemory());

El valor predeterminado es 1/64 de la memoria del sistema dM",runtime.freeMemory()/1024/1024) );

El código se ejecuta de la siguiente manera. De hecho, en el entorno real, también puede usar el motor de plantillas FreeMarker para renderizar y luego recordárselo por correo electrónico, lo que hará que la implementación sea más poderosa.

2. Presentemos Runtime en detalle. .exec() Antes del evento principal, probemos la taza de café df

El comando Linuxdf se utiliza para mostrar las estadísticas. Uso actual del disco del sistema. Se utiliza principalmente para ver las particiones del disco, el espacio utilizado en el disco y el espacio restante.

El comando es el siguiente:

df...

Las opciones comunes son las siguientes:

3. Runtime Wine plus ¿Qué pasará con Shell Coffee?

Comienza el evento principal Volviendo al código fuente de Runtime. , vemos que la serie de métodos exec() nos ayudará a iniciar un proceso de proceso, por lo que también podríamos pasar el comando df-h para averiguarlo.

publicclassFoo{

publicstaticvoidmain(Stringargs)throwsException{

//El comando df-h se utiliza para ver las particiones del disco, el espacio utilizado en el disco y el espacio restante

//df-h. muestra información en unidades apropiadas

System.out.println(exec("df-h"));

}

privatestaticStringexec(Stringcommand)throwsException{

Stringcmd={"/bin/sh","-c",command};

StringBuilderout=newStringBuilder();

BufferedReaderreader=null; p>

InputStreamin=null;

intenta{

Processprocess=Runtime.getRuntime().exec(cmd);

en=proceso.

getInputStream();

reader=newBufferedReader(newInputStreamReader(in));

Stringline;

while((line=reader.readLine())! = null){

out.append(line+"n");

}

process.waitFor();

}Finalmente {

if(lector!=null){

lector.close()

}

}

<; p>returnout.toString();

}

}

En el código, encontrará que se llama al método waitFor () del proceso. El efecto de este método hará que el hilo actual espere hasta que finalice el proceso representado por el objeto Proceso. De hecho, esperando que comience la ejecución internamente, todo se hace en el Proceso (la mayoría de los problemas en producción provienen de aquí), el código se ejecuta. como sigue.

El efecto es realmente bueno. En este caso, si desea monitorear y contar alguna función, también puede darle el comando al programa Java para su ejecución.

4.

Si prestas atención a Yuan Novels, debes saber que en "¿Cómo hacer que las aplicaciones Java se conviertan en un Xiaoqiang imposible de matar?" (中)》《¿Cómo hacer que las aplicaciones Java se vuelvan imposibles de eliminar Xiaoqiang? (Parte 2) "Hay dos artículos que utilizan ProcessBuilder para ejecutar comandos para iniciar el proceso. Entonces, ¿cuál es la principal diferencia entre Runtime y ProcessBuilder?

De hecho, el método Runtime.exec() está diseñado para aceptar una sola cadena, que está separada por espacios para separar el programa y los parámetros del comando ejecutable, por supuesto, también puede aceptar una cadena; parámetro de matriz.

Como se muestra en la figura anterior, la entrada del método de ProcessBuilder es ListString> o varias cadenas.

La similitud es que los métodos ProcessBuilder.start() y Runtime.exec() se utilizan para crear procesos del sistema operativo (para realizar operaciones de línea de comandos).

5. Bien, unos minutos de simple intercambio son principalmente para que todos se pongan en contacto y comprendan verdaderamente Runtime. Espero que sea útil para el trabajo de todos.

Finalmente, todavía uso la nueva espada divina de seis meridianos de Ali para darles a todos la espada divina de tres meridianos: el mejor desempeño de hoy es el requisito mínimo de mañana en este momento, debo ser yo, vivir en serio, Happy; ¡trabajar!