Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <unistd.h>
- #include <stdio.h>
- #include <sys/syscall.h>
- #include <sys/types.h>
- #include <sys/signal.h>
- #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
- // List common use signal names
- static const struct signal_name {
- const char *name;
- int sig;
- } signal_names[] = {
- { "HUP", SIGHUP },
- { "INT", SIGINT },
- { "QUIT", SIGQUIT },
- { "ILL", SIGILL },
- { "TRAP", SIGTRAP },
- { "ABRT", SIGABRT },
- { "FPE", SIGFPE },
- { "KILL", SIGKILL },
- { "USR1", SIGUSR1 },
- { "SEGV", SIGSEGV },
- { "USR2", SIGUSR2 },
- { "PIPE", SIGPIPE },
- { "ALRM", SIGALRM },
- { "TERM", SIGTERM },
- { "CONT", SIGCONT },
- { "STOP", SIGSTOP },
- };
- int signame_to_num(char *name) {
- size_t n;
- if(isdigit(*name)) {
- return atoi(name);
- }
- if(!strncasecmp(name, "sig", 3))
- name += 3;
- for(n = 0; n < ARRAY_SIZE(signal_names); n++) {
- if(!strncasecmp(signal_names[n].name, name)) {
- return signal_names[n].sig;
- }
- }
- return -1;
- }
- int main(int argc, char *argv[])
- {
- int sig = SIGTERM;
- int tgid = -1;
- int tid;
- if (argc != 4) {
- printf("Usage: %s SIGNAL|SIGNUM <tgid> <tid>\n", argv[0]);
- return 1;
- }
- sig = signame_to_num(argv[1]);
- tgid = atoi(argv[2]);
- tid = atoi(argv[3]);
- return syscall(SYS_tgkill, tgid, tid, sig);
- }
Add Comment
Please, Sign In to add comment