Viewing: kill.c
📄 kill.c (Read Only) ⬅ To go back
/* AdrOS kill utility — send signal to process */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char** argv) {
    if (argc <= 1) {
        fprintf(stderr, "usage: kill [-SIGNAL] PID...\n");
        return 1;
    }

    int sig = 15; /* SIGTERM */
    int start = 1;

    if (argv[1][0] == '-') {
        const char* s = argv[1] + 1;
        if (strcmp(s, "9") == 0 || strcmp(s, "KILL") == 0) sig = 9;
        else if (strcmp(s, "15") == 0 || strcmp(s, "TERM") == 0) sig = 15;
        else if (strcmp(s, "2") == 0 || strcmp(s, "INT") == 0) sig = 2;
        else if (strcmp(s, "1") == 0 || strcmp(s, "HUP") == 0) sig = 1;
        else if (strcmp(s, "0") == 0) sig = 0;
        else sig = atoi(s);
        start = 2;
    }

    int rc = 0;
    for (int i = start; i < argc; i++) {
        int pid = atoi(argv[i]);
        if (pid <= 0) {
            fprintf(stderr, "kill: invalid pid '%s'\n", argv[i]);
            rc = 1;
            continue;
        }
        if (kill(pid, sig) < 0) {
            fprintf(stderr, "kill: %d: no such process\n", pid);
            rc = 1;
        }
    }
    return rc;
}