Linux 父进程退出后如何进入子进程调试
在调试守护进程过程中,遇到exit(0)后,程序 就退出了,如何让调试继续进行?例子:
#include<stdio.h>
#include<sys/types.h>
#include<sys/param.h>
#include<unistd.h>
#include<signal.h>
#include<sys/stat.h>
#include<time.h>
#include<syslog.h>
#include <dlfcn.h>
#include <errno.h>
int daemon_init(void)
{
pid_t pid;
int fd;
int i;
pid = fork();
if(pid<0)
{
perror("Fail to creat child process.\n");
return -1;
}
else if(pid>0)
{
printf("daemon parent exit,pid = %d\n",pid);
exit(0);//结束父进程,使得子进程成为后台进程
}
setsid();//建立一个新的进程组
pid = fork();
if(pid<0)
{
perror("Setsid failed.\n");
return -1;
}
else if(pid > 0)
{
exit(0);
}
for(i = 0; i < NOFILE; close(i++));
chdir("/");
umask(0);
return 0;
}
void sig_term(int signo)
{
if(signo == SIGINT)
/* catched signal sent by kill(1) command */
{
syslog(LOG_INFO, "program terminated.");
closelog();
exit(0);
}
}
int main(int argc,char **argv)
{
time_t now;
if(argc == 2)
{
if(!strcmp(argv[1],"-a"))
{
if(daemon_init() == -1)
{
printf("can't fork self\n");
exit(0);
}
openlog("Test", LOG_PID, LOG_USER);
syslog(LOG_INFO, "program started.");
signal(SIGTERM, sig_term); /* arrange to catch the signal */
while(1)
{
sleep(8);
time(&now);
syslog(LOG_USER|LOG_INFO,"系统时间: \t%s\t\n",ctime(&now));
}
}
return 0;
}
time(&now);
syslog(LOG_USER|LOG_INFO,"系统时间2: \t%s\t\n",ctime(&now));
}
...全文
相关推荐
Linux进程退出之方法论_1.docx
Linux进程退出之方法论_1.docx
《linux 学习文档》最新高清修订版
对于linux c编程和linux基础编程有较为详细的介绍,可以通过这个入门linux
操作系统实验_进程控制.doc
操作系统实验_进程控制.doc
PTRACE函数代码分析
Ptrace 提供了一种父进程可以控制子进程运行,并可以检查和改变它的核心image。它主要用于实现断点调试。一个被跟踪的进程运行中,直到发生一个信号。则进程被中止,并且通知其父进程。在进程中止的状态下,进程的内存空间可以被读写。父进程还可以使子进程继续执行,并选择是否是否忽略引起中止的信号。
Vi 文本编辑器.pdf
。。。


