Prozessmanagement und alle ähnlichen Operationen werden von den OS getan. Daher muss die JVM den entsprechenden Systemaufruf aufrufen, um einen Prozess zu zerstören. Dies wird natürlich zwischen den Betriebssystemen variieren.
Unter Linux haben wir die kill
syscall das zu tun - oder 10, wenn wir den laufenden Prozess beenden möchten. Die nativen Methoden in den JDK-Quellen sind natürlich nach dem Betriebssystem getrennt, auf dem die JVM ausgeführt wird. Wie zuvor erwähnt, hat Process
ein public void destroy()
-Verfahren. Im Fall von Linux wird diese Methode von UNIXProcess
implementiert. Die destroy()
Methode ist ziemlich ähnlich wie dies umgesetzt:
private static native void destroyProcess(int pid);
public void destroy() {
destroyProcess(pid);
}
Die native Methode destroyProcess()
, die wiederum in UNIXProcess_md.c
definiert ist, und sieht wie folgt aus:
JNIEXPORT void JNICALL
Java_java_lang_UNIXProcess_destroyProcess(JNIEnv *env, jobject junk, jint pid)
{
kill(pid, SIGTERM);
}
Wo kill
die Linux syscall ist, dessen Quelle ist im Linux-Kernel verfügbar, genauer gesagt in der Datei kernel/signal.c
. Es wird als SYSCALL_DEFINE2(kill, pid_t, pid, int, sig)
deklariert.
Viel Spaß beim Lesen! :)
Es ruft fast sicher 'kill (pid, SIGTERM)'. Warum denkst du, du musst es wissen? – EJP