Signatur
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
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);
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);
// 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.