Πώς να σκοτώσετε το παιδί από το πιρούνι;

Πώς να σκοτώσετε το παιδί από το πιρούνι;

Δείτε το kill system call. Συνήθως είναι καλή ιδέα να χρησιμοποιήσετε πρώτα το SIGTERM για να δώσετε στη διαδικασία την ευκαιρία να πεθάνει με ευγνωμοσύνη πριν χρησιμοποιήσετε το SIGKILL.

ΕΠΕΞΕΡΓΑΣΙΑ

Ξέχασα ότι πρέπει να χρησιμοποιήσετε το waitpid για να λάβετε την κατάσταση επιστροφής αυτής της διαδικασίας και να αποτρέψετε διεργασίες ζόμπι.

ΜΙΑ ΠΕΡΑΙΤΕΡΩ ΕΠΕΞΕΡΓΑΣΙΑ

Μπορείτε να χρησιμοποιήσετε τον ακόλουθο κώδικα:

kill(pid, SIGTERM);

bool died = false;
for (int loop; !died && loop < 5 /*For example */; ++loop)
{
    int status;
    pid_t id;
    sleep(1);
    if (waitpid(pid, &status, WNOHANG) == pid) died = true;
}

if (!died) kill(pid, SIGKILL);

Θα δώσει στη διαδικασία 5 δευτερόλεπτα για να πεθάνει με χάρη


Στείλτε ένα σήμα.

#include <sys/types.h>
#include <signal.h>

kill(pid, SIGKILL);

/* or */

kill(pid, SIGTERM);

Η δεύτερη μορφή είναι προτιμότερη, μεταξύ άλλων, εάν χειρίζεστε μόνοι σας τα σήματα.


Έκδοση kill(pid, SIGKILL) από εκτός γονέα.