GNU/Linux >> LINUX-Kenntnisse >  >> Linux

SIGTERM vs. SIGKILL:Was ist der Unterschied?

Das Beenden eines Prozesses ist ein entscheidender Teil des Prozessmanagements in Linux.

Da die Prozessverwaltung ein eigenes Thema ist, gehe ich in diesem Beitrag nicht näher auf die Verwaltung von Benutzerprozessen und die Signalverarbeitung ein.

Ich werde mich auf die Verwendung der Signale SIGTERM und SIGKILL konzentrieren, um einen Prozess zu beenden. Ich werde auch besprechen, warum Sie die Verwendung von SIGKILL vermeiden sollten.

Was ist SIGTERM?

In UNIX-ähnlichen Systemen wird das Signal SIGTERM zum Beenden eines Programms verwendet. Sie können das ziemlich gut aus seinem Namen erraten, der sich aus SIGnal und TERMinate zusammensetzt.

Das SIGTERM kann auch als Softkill bezeichnet werden, da der Prozess, der das SIGTERM-Signal empfängt, es möglicherweise ignoriert.

Mit anderen Worten, es ist die höfliche Art, einen Prozess zu beenden.

Wie sende ich SIGTERM an einen Prozess in Linux?

Der Kill-Befehl in Linux wird verwendet, um alle diese Signale an Prozesse zu senden.

Standardmäßig sendet der Kill-Befehl das SIGTERM-Signal. Sie können es explizit mit -15 erwähnen, aber das ist überflüssig.

Sie müssen die PID des Prozesses kennen, um diesen Befehl wie folgt zu verwenden:

kill <process_id>

Sie können den Befehl ps unter Linux verwenden, um die Prozess-ID abzurufen.

Was ist SIGKILL?

Der SIGKILL dient zum sofortigen Beenden eines Prozesses. Dieses Signal kann nicht ignoriert oder blockiert werden. Der Prozess wird zusammen mit seinen Threads (falls vorhanden) beendet.

Es ist die brutale Art, einen Prozess zu töten, und es sollte nur als letztes Mittel eingesetzt werden. Angenommen, Sie haben einen nicht reagierenden Prozess, den Sie schließen möchten. In einem solchen Fall kann der SIGKILL verwendet werden.

Wie sende ich SIGKILL an einen Prozess in Linux?

Sie können die Option -9 verwenden, um das SIGKILL-Signal mit dem Kill-Befehl zu senden und den Prozess sofort zu beenden:

kill -9 <process_id>

SIGTERM vs. SIGKILL:Warum sollten Sie SIGTERM SIGKILL vorziehen?

Obwohl diese beiden Signale zum Beenden eines Prozesses verwendet werden, gibt es einige Unterschiede zwischen den beiden:

  • SIGTERM beendet den Prozess elegant, während SIGKILL den Prozess sofort beendet.
  • SIGTERM-Signal kann verarbeitet, ignoriert und blockiert werden, aber SIGKILL kann nicht verarbeitet oder blockiert werden.
  • SIGTERM beendet die untergeordneten Prozesse nicht. SIGKILL beendet auch die untergeordneten Prozesse.

Einige Linux-Benutzer gewöhnen sich daran, „kill -9“ zu verwenden, und das sollten Sie vermeiden. Sofern Sie keinen nicht reagierenden Prozess haben, müssen Sie SIGKILL nicht verwenden.

Mit SIGTERM erhält ein Prozess die Zeit, die Informationen an seine übergeordneten und untergeordneten Prozesse zu senden. Seine untergeordneten Prozesse werden von init behandelt.

Die Verwendung von SIGKILL kann zur Erstellung eines Zombie-Prozesses führen, da der getötete Prozess nicht die Möglichkeit hat, seinem übergeordneten Prozess mitzuteilen, dass er ein Kill-Signal erhalten hat.

Dieser Comic von Turnoff erklärt humorvoll den Unterschied zwischen SIGTERM und SIGKILL.

Ich hoffe, Sie haben jetzt ein besseres Verständnis für das Beenden eines Prozesses mit SIGTERM oder SIGKILL.

Wenn Sie Fragen oder Anregungen haben, können Sie gerne einen Kommentar hinterlassen.


Linux
  1. Linux vs. Unix:Was ist der Unterschied?

  2. Was ist der Unterschied zwischen InnoDB und MyISAM?

  3. Unterschied zwischen SIGKILL SIGTERM unter Berücksichtigung des Prozessbaums

  4. Was ist die Definition einer Sitzung unter Linux?

  5. Was ist der Unterschied zwischen ls und l?

Useradd vs. Adduser:Was ist der Unterschied?

iptables vs. nftables:Was ist der Unterschied?

DevOps vs. Software Engineer:Was ist der Unterschied?

Was ist ein Hypervisor? Was ist der Unterschied zwischen Typ 1 und 2?

Was ist der Unterschied zwischen Curl und Wget?

HTTP vs. HTTPS:Was ist der Unterschied?