我编写了一段代码,该代码进入无限循环以对三相电表进行定期检查。为了以 json 格式将数据发送到服务器,我使用了一个专门编写的程序来获取数据并将它们发送到服务器。问题是这种机制只能工作几个小时。这段时间之后,fork 停止调用用于发送数据的程序,程序继续运行。
您认为可能是什么问题?
提前感谢您的回复
附言下面是用于 fork() 的代码
int pid = fork();
if ( pid == 0 ) {
execlp("./json_send","./json_send",0);
} else {
printf( "\nParent process: %d", pid );
}
最佳答案
请仔细阅读 fork(2)手册页。 fork
- 和 execve
以及大多数其他系统调用 - 可能会(有时确实会)失败(例如,由于限制:参见 setrlimit(2) ...)。所以代码至少:
fflush(NULL);
pid = fork();
if ( pid == 0 ) {
execlp("./json_send","./json_send",NULL);
perror("execlp json_send");
} else if (pid>0) {
printf( "\nParent process: %d\n", pid );
}
else { /* fork failed */
perror("fork");
exit(EXIT_FAILURE);
}
顺便说一句,您应该始终等待(使用例如 waitpid(2) ...)您的 child processes , 避免 zombie processes .
请阅读Advanced Linux Programming其中有几个章节专门介绍相关主题。
顺便说一句,如果 json_send
是你的小程序,我会考虑将它的功能(和它的一些代码)合并到你的 fork 程序中。我也会考虑使用 syslog(3)用于记录目的。您可能需要编码 event loop (参见 this answer )使用 poll(2)等等……
此外,使用 gcc -Wall -g
编译您的程序,使用 gdb
调试器,也许还有 strace
关于c - 问题 fork() 不执行进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23403742/