C 生成守护进程函数和信号处理程序
我想生成一个守护进程,应用信号处理程序,并将它们记录到一个文件中。我无法在文件中记录信号处理程序。此外,我不确定这些信号处理程序是否正常工作。。。。如何检查它们。请帮忙C 生成守护进程函数和信号处理程序,c,daemon,C,Daemon,我想生成一个守护进程,应用信号处理程序,并将它们记录到一个文件中。我无法在文件中记录信号处理程序。此外,我不确定这些信号处理程序是否正常工作。。。。如何检查它们。请帮忙 /* A signal handler */ void signal_handler(int signal) { printf("Caught signal %d\t", signal); if (signal == SIGINT) printf("Interrupt (Ctrl-C)"); e
/* A signal handler */
void signal_handler(int signal)
{
printf("Caught signal %d\t", signal);
if (signal == SIGINT)
printf("Interrupt (Ctrl-C)");
else if (signal == SIGQUIT)
{
printf("QUIT");
exit(0);
}
else if (signal == SIGABRT)
{
printf("Process Aborted");
exit(0);
}
else if (signal == SIGTRAP)
printf("Trace/breakpoint trap");
else if (signal == SIGKILL)
{
printf("Kill");
exit(0);
}
else if (signal == SIGTERM)
printf("Termination");
else if (signal == SIGCONT)
printf("Continue if stopped");
else if (signal == SIGTSTP)
printf("Pause the execution");
printf("\n");
}
Here is the main function
FILE *fp= NULL;
fp = fopen ("Log.txt", "w+");
do
{
daemon(1, 1);// fork to a background daemon process
//printf("daemon is not working");
printf("daemon-ed \n ");
/* Registering signal handlers */
signal(SIGINT, signal_handler);
signal(SIGQUIT, signal_handler); // Set signal_handler() as the
signal(SIGABRT, signal_handler); // signal handler for these
signal(SIGTRAP, signal_handler); // signals.
signal(SIGKILL, signal_handler);
signal(SIGTERM, signal_handler);
signal(SIGCONT, signal_handler);
signal(SIGTSTP, signal_handler);
fprintf(fp, "%s", signal);
fflush(fp);
// Implement and call some function that does core work for this daemon.
fclose(fp);
}while(-1);
return 0;
文件的fprintf()非常简单
下面的示例来自
您需要文件指针,例如,您可以在主文件*pFile中声明该指针
然后使用fopen给出pFile值
之后,您可以使用fprintf写入文件
/* fprintf example */
#include <stdio.h>
int main ()
{
FILE * pFile;
int n;
char name [100];
pFile = fopen ("myfile.txt","w");
for (n=0 ; n<3 ; n++)
{
puts ("please, enter a name: ");
gets (name);
fprintf (pFile, "Name %d [%-10.10s]\n",n,name);
}
fclose (pFile);
return 0;
}
/*fprintf示例*/
#包括
int main()
{
文件*pFile;
int n;
字符名[100];
pFile=fopen(“myfile.txt”,“w”);
对于(n=0;n首先,您不需要将所有信号和守护进程调用放入循环中。注册信号是一次性的过程,因此每当您收到信号时,都会调用相应的信号处理程序。另一件事,我不确定您在尝试执行'fprintf(fp,“%s”,signal);'
您可以使用全局变量在信号处理程序中设置它,并使用它在日志中写入值
因此,您的主视图应该类似于:
int glb_sig; //Set its value in the signal handler
main() {
FILE *fp= NULL;
fp = fopen ("Log.txt", "w+");
daemon(1, 0);// fork to a background daemon process
printf("daemon-ed \n ");
/* Registering signal handlers */
signal(SIGINT, signal_handler);
...
while(1) {
}
注意:如果要查看printfs,请使用daemon(1,1)不要在信号处理程序中使用printf。它不是信号安全的。句点。可能daemon()正在将stdout连接到>/dev/null。请尝试使用fprintf()它不是信号安全的,等等。但如果信号处理程序正在工作,至少你会看到一些日志。要测试它们,请使用kill命令。另一件事:SIGKILL无法处理,所以不要麻烦。这就是我遇到问题的地方,我不知道如何将fprintf()转换为文件我如何使用frpintf()在这里,我不接受任何输入..我无法在这里应用:(这只是一个如何打印到文件的示例。你可以让程序生成文件并跟踪位置。在任何情况下,你都可以执行类似fprintf(日志文件,“记录此信息”)的操作);它的工作原理有点像printf。使用fprintf不需要输入