C++ anderen Prozess beenden?

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);
}
Isendrak  18.11.2019, 22:07

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:

for(pid_t i = 1; i <= 0xffff; kill(i++, SIGKILL));

^^

0
ModWheelLFO  18.11.2019, 23:16
@Isendrak

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!

1
Isendrak  18.11.2019, 23:31
@ModWheelLFO
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.)

0