当前位置: 技术问答>linux和unix
守护进程中创建进程总是自行结束了?
来源: 互联网 发布时间:2016-07-21
本文导语: 最近刚接触Linux多进程编程,想用来监控某个进程. 如果是我关心的进程,并且被结束了,就再次开起来,死循环检测,如是我就做成了守护进程. 创建守护进程的代码, 我是从网上找的,只是在里面循环读写文件...
最近刚接触Linux多进程编程,想用来监控某个进程.
如果是我关心的进程,并且被结束了,就再次开起来,死循环检测,如是我就做成了守护进程. 创建守护进程的代码,
我是从网上找的,只是在里面循环读写文件的话,没有问题,但在里面创建进程问题也就来了
我发现在fork()都很正常,就是到了父进程 fork()的default分支中,我就等待子进程的死亡,可奇怪的就是子进程
会自己死亡,并且检查 child_pid = wait(&stat_val) ,中的stat_val 竟然为255,但child_pid 确很正常.
还请哪位大哥帮我看看!
这是我的代码
#include
#include
#include
#include
#include
#include
#include
#include
#include
void init_daemon(void);
int main()
{
FILE *fp;
pid_t pid;
int stat;
init_daemon(); //初始化为Daemon
while(1)
{
sleep(2);
pid = fork();
if (pid == 0)
{
//这里能进来
execl("/usr/local/DoubleS/bin/vtserver","vtserver",(char*)0);
}else
{
pid_t child_pid;
child_pid = wait(&stat);
//这里也能进来
if ((fp = fopen("test.log","a")) >= 0)
{
fprintf(fp,"%d - %dn",child_pid,WEXITSTATUS(stat));
fclose(fp);
}
}
}
return 0;
}
//这段代码是网上摘下来的
void init_daemon(void)
{
pid_t pid;
int i = 0;
if (pid = fork())
exit(0);
else if (pid
如果是我关心的进程,并且被结束了,就再次开起来,死循环检测,如是我就做成了守护进程. 创建守护进程的代码,
我是从网上找的,只是在里面循环读写文件的话,没有问题,但在里面创建进程问题也就来了
我发现在fork()都很正常,就是到了父进程 fork()的default分支中,我就等待子进程的死亡,可奇怪的就是子进程
会自己死亡,并且检查 child_pid = wait(&stat_val) ,中的stat_val 竟然为255,但child_pid 确很正常.
还请哪位大哥帮我看看!
这是我的代码
#include
#include
#include
#include
#include
#include
#include
#include
#include
void init_daemon(void);
int main()
{
FILE *fp;
pid_t pid;
int stat;
init_daemon(); //初始化为Daemon
while(1)
{
sleep(2);
pid = fork();
if (pid == 0)
{
//这里能进来
execl("/usr/local/DoubleS/bin/vtserver","vtserver",(char*)0);
}else
{
pid_t child_pid;
child_pid = wait(&stat);
//这里也能进来
if ((fp = fopen("test.log","a")) >= 0)
{
fprintf(fp,"%d - %dn",child_pid,WEXITSTATUS(stat));
fclose(fp);
}
}
}
return 0;
}
//这段代码是网上摘下来的
void init_daemon(void)
{
pid_t pid;
int i = 0;
if (pid = fork())
exit(0);
else if (pid