博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C程序fork进程导致PHP执行不退出
阅读量:7136 次
发布时间:2019-06-28

本文共 1741 字,大约阅读时间需要 5 分钟。

/********************************************************************* *                C程序fork进程导致PHP执行不退出 * 说明: *     由于测试的GPIO程序需要持续运行,而主进程需要处理其他事务但退出时 * 由于子线程未结束导致PHP系统调用函数不退出,解决办法是双重fork(第一次 * fork产生子进程用于kill掉让第二次fork出的子进程变成孤儿进程),并将最终 * 的子进程转换为守护进程,从而不影响PHP获取主进程数据。 * *                                   2017-8-16 深圳 龙华樟坑村 曾剑锋 ********************************************************************/一、参考文档:     1. Linux 守护进程的实现        http://alfred-sun.github.io/blog/2015/06/18/daemon-implementation/二、测试daemon Demo:    #include 
#include
#include
#include
#include
#include
#include
#include
#include
// 守护进程初始化函数 void init_daemon() { pid_t pid; int i = 0; if ((pid = fork()) == -1) { printf("Fork error !\n"); exit(1); } if (pid != 0) { exit(0); // 父进程退出 } setsid(); // 子进程开启新会话,并成为会话首进程和组长进程 if ((pid = fork()) == -1) { printf("Fork error !\n"); exit(-1); } if (pid != 0) { exit(0); // 结束第一子进程,第二子进程不再是会话首进程 } chdir("/tmp"); // 改变工作目录 umask(0); // 重设文件掩码 for (; i < getdtablesize(); ++i) { close(i); // 关闭打开的文件描述符 } return; } int main(int argc, char *argv[]) { int fp; time_t t; char buf[] = { "This is a daemon: "}; char *datetime; int len = 0; //printf("The NOFILE is: %d\n", NOFILE); //printf("The tablesize is: %d\n", getdtablesize()); //printf("The pid is: %d\n", getpid()); // 初始化 Daemon 进程 init_daemon(); // 每隔一分钟记录运行状态 while (1) { if (-1 == (fp = open("/tmp/daemon.log", O_CREAT|O_WRONLY|O_APPEND, 0600))) { printf("Open file error !\n"); exit(1); } len = strlen(buf); write(fp, buf, len); t = time(0); datetime = asctime(localtime(&t)); len = strlen(datetime); write(fp, datetime, len); close(fp); sleep(60); } return 0; }

 

转载地址:http://vvvrl.baihongyu.com/

你可能感兴趣的文章
dup和dup2函数
查看>>
Js的原型和原型链理解
查看>>
未知题目
查看>>
在C#中??和?分别是什么意思?
查看>>
APP 开发,代码写的真烂
查看>>
适合0基础的web开发系列教程-html5新的表单元素
查看>>
Python 常用算法记录
查看>>
OC中的野指针(僵尸指针)
查看>>
SSM环境的搭建
查看>>
leetcode 196. Delete Duplicate Emails
查看>>
聚美第六天
查看>>
Q:java中的泛型数组
查看>>
[Android] adb 命令 dumpsys activity , 用来看 task 中的activity。 (uninstall virus)
查看>>
数据分析学习笔记(三)-NetworkX的使用
查看>>
rm 命令简要
查看>>
xadmin快速搭建后台管理系统
查看>>
MySQL 5.7 分区表性能下降的案例分析
查看>>
遍历文件夹并建成目录树
查看>>
结对项目--四则运算“软件”之升级版
查看>>
Java反射学习总结
查看>>