C++ anderen Prozess beenden?
Weiß jemand wie das geht?
2 Antworten
Das kommt auf das jeweilige Betriebssystem an.
Da es den "Themen zur Frage" vermutlich um Windows geht, findst du hier ein ganz gutes Beispiel: https://stackoverflow.com/a/7956651 (bei Bedarf anzupassen)
Unter Linux:
#include <signal.h>
#include <sys/types.h>
// ...
for (size_t i = 1; i <= 0xFFFFul; ++i) {
kill((pid_t)i, SIGKILL);
}
pid_t war früher ein 16 bittiger Unsigned, ist inzwischen aber größer, da man maximale PIDs auch weit größer als 65535 haben kann.
Das Problem sind eingebettete Systeme auf denen pid_t häufig ein 16-bittiger "unsigned short" ist.
Und genau deshalb habe ich size_t gewählt, weil wir sonst eine Endlosschleife hätten.
for (pid_t i = 0; i < 0xFFFFul; ++i) {
// wenn pid_t == uint16_t
// dann Endlosschleife!
}
Ist aber sowieso kein ernst zu nehmender Code ... wer will schon all seine Prozesse unabhängig von der PID abschießen. :)
Ansonsten ein sehr vernünftiger Einwand!
wer will schon all seine Prozesse unabhängig von der PID abschießen. :)
Zum Beispiel jemand, der ein "klassiches" Shutdown-Script schreiben will.
Das sähe z.B. so aus:
#!/bin/bash
echo "sending TERM to all remaining processes..."
for pid in $(ps -e | awk '{print $ 1}' | grep -E '[0-9]');do
kill -TERM $pid
done
sleep 5s
echo "sending KILL to all remaining processes..."
for pid in $(ps -e | awk '{print $ 1}' | grep -E '[0-9]');do
kill -KILL $pid
done
echo "syncing filesystems..."
sync;sync
echo "unmounting filesystems..."
umount -a
mount / -o ro
halt
Aber sonst eigentlich niemand. ^^
(Wobei das ganze auch durchaus in Form einer C/C++-Funktion gemacht werden kann, wobei das betreffende Programm statisch gelinkt direkt als /init verwendet werden kann. Ist aber nur in wirklich SEHR speziellen Fällen nötig oder überhaupt sinnvoll.)
Wäre es da nicht sinnvoller, für i direkt pid_t zu nehmen?
Ausserdem lässt sich das ganze auch zu nem "hübschen" Einzeiler umformulieren:
^^