c - 问题 fork() 不执行进程

标签 c fork

我编写了一段代码,该代码进入无限循环以对三相电表进行定期检查。为了以 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/

相关文章:

c++ - Qt4 应用程序中 "fork()"的可移植方式?

c - 我如何创建一个包含 'Signature Algorithm' 的证书文件使用 openssl api

c++ - 关于C/C++中的字母f(浮点型)

C fork : child proc-meant printf messages appear only after the whole program finishes

c - 使用 Execvp、fork 和 pipe 的递归管道函数中的错误文件描述符

c - 写入管道总是失败

c++ - 我们应该在子进程中使用退出还是返回

c - C 中判断指针是否属于集合的最快方法是什么?

c - 格式化字符串漏洞 - printf

c - 为什么使用 printf 的输出不同?