Start · Sprachen · PHP · Referenz · ssh2_send_signal

ssh2_send_signal

Funktion

Sendet ein POSIX-Signal an einen über einen SSH2-Kanal laufenden entfernten Prozess.

Kategorie: http

Signatur

ssh2_send_signal(resource $channel, string $signal): bool

Beschreibung

ssh2_send_signal ermöglicht es, ein POSIX-Signal (z. B. SIGTERM, SIGKILL, SIGINT) an einen Prozess zu senden, der auf dem entfernten SSH-Server in einem offenen Kanal ausgeführt wird. Damit lässt sich ein gestarteter Remote-Prozess von der Client-Seite aus steuern oder beenden, ohne eine neue SSH-Verbindung aufzubauen.

Die Funktion ist Teil der SSH2-Erweiterung (PECL ssh2) und setzt voraus, dass zuvor mit ssh2_connect eine Verbindung hergestellt und ein Kanal (z. B. per ssh2_exec) geöffnet wurde. Der Signalname wird als String übergeben, wobei der Präfix SIG weggelassen wird – also z. B. 'KILL' statt 'SIGKILL'.

Typische Anwendungsfälle sind das ordentliche Beenden (SIGTERM) oder das erzwungene Abbrechen (SIGKILL) eines hängenden Remote-Prozesses, sowie das Auslösen benutzerdefinierter Signale (SIGUSR1, SIGUSR2) für Prozesskommunikation.

Die Funktion steht nur zur Verfügung, wenn PHP mit der PECL-Erweiterung ssh2 kompiliert bzw. installiert wurde. Ohne diese Erweiterung ist sie nicht verfügbar.

Parameter

Name Typ Default Beschreibung
$channel Pflicht resource Ein offener SSH2-Kanal, wie er z. B. von ssh2_exec zurückgegeben wird, über den der Zielprozess läuft.
$signal Pflicht string Name des POSIX-Signals ohne den Präfix SIG – z. B. 'TERM', 'KILL', 'INT', 'USR1'.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn das Signal erfolgreich gesendet wurde, andernfalls false.

Beispiele

Remote-Prozess mit SIGTERM beenden

<?php
// Verbindung aufbauen
$connection = ssh2_connect('example.com', 22);
ssh2_auth_password($connection, 'user', 'geheimesPasswort');

// Langläufigen Prozess starten
$channel = ssh2_exec($connection, 'sleep 300');

// Kurz warten, dann ordentlich beenden
sleep(1);

if (ssh2_send_signal($channel, 'TERM')) {
    echo "SIGTERM erfolgreich gesendet." . PHP_EOL;
} else {
    echo "Fehler beim Senden des Signals." . PHP_EOL;
}

fclose($channel);
SIGTERM erfolgreich gesendet.

Erzwungenes Beenden mit SIGKILL

<?php
$connection = ssh2_connect('example.com', 22);
ssh2_auth_pubkey_file(
    $connection,
    'deploy',
    '/home/deploy/.ssh/id_rsa.pub',
    '/home/deploy/.ssh/id_rsa'
);

// Prozess starten, der auf SIGTERM nicht reagiert
$channel = ssh2_exec($connection, 'trap "" TERM; sleep 600');

sleep(2);

// SIGTERM blieb wirkungslos — SIGKILL erzwingen
if (ssh2_send_signal($channel, 'KILL')) {
    echo "Prozess mit SIGKILL zwangsbeendet." . PHP_EOL;
} else {
    echo "Signal konnte nicht gesendet werden." . PHP_EOL;
}

fclose($channel);
Prozess mit SIGKILL zwangsbeendet.

// Wichtig · Fallstricke

Sicherheitshinweis: Stellen Sie sicher, dass der SSH-Benutzer nur die Berechtigungen besitzt, die er tatsächlich benötigt. Das Senden von Signalen an beliebige Prozesse kann zu unerwünschtem Verhalten oder Systeminstabilität führen, wenn dem Konto zu weitreichende Rechte eingeräumt wurden.

PECL-Abhängigkeit: ssh2_send_signal ist nicht Teil der PHP-Kernbibliothek, sondern erfordert die PECL-Erweiterung ssh2 (libssh2). Prüfen Sie die Verfügbarkeit mit extension_loaded('ssh2').

Signalname: Der übergebene Signalname muss exakt dem SSH-Protokoll-konformen Namen entsprechen (ohne SIG-Präfix). Ein falsch geschriebener Signalname führt zum Rückgabewert false, ohne dass eine weitere Fehlermeldung ausgegeben wird.