62 lines
1.4 KiB
C
62 lines
1.4 KiB
C
#define _XOPEN_SOURCE 500
|
|
#include <stdio.h>
|
|
#include <signal.h>
|
|
#include <unistd.h>
|
|
#include <sys/types.h>
|
|
|
|
void printUsage(char *arg);
|
|
|
|
int main(int argc, char* argv[])
|
|
{
|
|
FILE *fp;
|
|
int opt;
|
|
pid_t process_id;
|
|
char pidfile[] = "/tmp/daemon-sig-ex.pid";
|
|
|
|
/* Kontrollera ifall PID-filen finns */
|
|
if ( (fp = fopen(pidfile, "r")) == 0 )
|
|
{
|
|
fprintf(stderr, "Ingen PID-fil, körs verkligen demonen?\n");
|
|
return 1;
|
|
}
|
|
/* Läs in PID till process_id variabeln */
|
|
fscanf(fp, "%d", &process_id);
|
|
|
|
/* Om inga argument angavs, skriv ut demonens PID */
|
|
if (argc == 1)
|
|
printf("Demonen körs med PID: %d\n", process_id);
|
|
|
|
/* Behandla argument till programmet */
|
|
while ((opt = getopt(argc, argv, "utqh")) != -1)
|
|
{
|
|
switch (opt)
|
|
{
|
|
case 'u':
|
|
kill(process_id, SIGUSR1);
|
|
break;
|
|
case 't':
|
|
kill(process_id, SIGTERM);
|
|
break;
|
|
case 'q':
|
|
kill(process_id, SIGQUIT);
|
|
break;
|
|
case 'h':
|
|
printUsage(argv[0]);
|
|
return 0;
|
|
default:
|
|
printUsage(argv[0]);
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void printUsage(char *arg)
|
|
{
|
|
fprintf(stderr, "Usage: %s [-u] [-t] [-q] [-h]\n"
|
|
"-u = send SIGUSR1 to daemon\n"
|
|
"-t = send SIGTERM to daemon\n"
|
|
"-q = send SIGQUIT to quit the daemon\n"
|
|
"-h = display help\n", arg);
|
|
}
|