gestión de procesos y todas las operaciones se llevan a cabo como por el sistema operativo. Por lo tanto, la JVM debe llamar a la llamada del sistema apropiada para destruir un proceso. Esto, obviamente, variará entre los sistemas operativos.
En Linux, tenemos el syscall kill
para hacer eso - o exit
si queremos terminar el proceso en ejecución. Los métodos nativos en las fuentes JDK están, por supuesto, separados de acuerdo con el sistema operativo en el que se ejecutará la JVM. Como se indicó anteriormente, Process
tiene un método public void destroy()
. En el caso de Linux, este método está implementado por UNIXProcess
. El método destroy()
se lleva a cabo más o menos así:
private static native void destroyProcess(int pid);
public void destroy() {
destroyProcess(pid);
}
El método nativo destroyProcess()
, a su vez, se define en UNIXProcess_md.c
y se ve así:
JNIEXPORT void JNICALL
Java_java_lang_UNIXProcess_destroyProcess(JNIEnv *env, jobject junk, jint pid)
{
kill(pid, SIGTERM);
}
Dónde kill
es la llamada al sistema de Linux, cuya fuente está disponible en el kernel de Linux, más precisamente en el archivo kernel/signal.c
. Se declara como SYSCALL_DEFINE2(kill, pid_t, pid, int, sig)
.
Happy reading! :)
Casi con seguridad llama 'kill (pid, SIGTERM)'. ¿Por qué crees que necesitas saber? – EJP