#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <setjmp.h>
#define LOGFILE "pid.log"
void sig_handler(int sig);
void register_daemon(int pid);
int kill_sig = 0;
sig_atomic_t jmpok;
static sigjmp_buf jmpbuf;
int main(int argc, char *argv[])
{
pid_t pid;
pid = getpid();
register_daemon(pid);
signal(SIGTERM,sig_handler);
kill_sig = sigsetjmp(jmpbuf, 0);
if (kill_sig)
{
exit(0);
}
jmpok = 1;
for(;;);
exit(0);
}
void sig_handler(int sig)
{
if (!jmpok)
return;
if (sig == SIGTERM)
{
signal(SIGTERM,SIG_DFL);
jmpok = 0;
siglongjmp(jmpbuf, 0);
}
return;
}
void register_daemon(int pid)
{
FILE *fp;
fp = fopen(LOGFILE, "a");
fprintf(fp,"%u\n",pid);
fclose(fp);
return;
}