C程序fork进程导致PHP执行不退出
/*********************************************************************
* C程序fork进程导致PHP执行不退出
* 说明:
* 由于测试的GPIO程序需要持续运行,而主进程需要处理其他事务但退出时
* 由于子线程未结束导致PHP系统调用函数不退出,解决办法是双重fork(第一次
* fork产生子进程用于kill掉让第二次fork出的子进程变成孤儿进程),并将最终
* 的子进程转换为守护进程,从而不影响PHP获取主进程数据。
*
* 2017-8-16 深圳 龙华樟坑村 曾剑锋
********************************************************************/ 一、参考文档:
. Linux 守护进程的实现
http://alfred-sun.github.io/blog/2015/06/18/daemon-implementation/ 二、测试daemon Demo:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> // 守护进程初始化函数
void init_daemon()
{
pid_t pid;
int i = ; if ((pid = fork()) == -) {
printf("Fork error !\n");
exit();
}
if (pid != ) {
exit(); // 父进程退出
} setsid(); // 子进程开启新会话,并成为会话首进程和组长进程
if ((pid = fork()) == -) {
printf("Fork error !\n");
exit(-);
}
if (pid != ) {
exit(); // 结束第一子进程,第二子进程不再是会话首进程
}
chdir("/tmp"); // 改变工作目录
umask(); // 重设文件掩码
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 = ;
//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 () {
if (- == (fp = open("/tmp/daemon.log", O_CREAT|O_WRONLY|O_APPEND, ))) {
printf("Open file error !\n");
exit();
}
len = strlen(buf);
write(fp, buf, len);
t = time();
datetime = asctime(localtime(&t));
len = strlen(datetime);
write(fp, datetime, len);
close(fp);
sleep();
} return ;
}
C程序fork进程导致PHP执行不退出的更多相关文章
- Linux从程序到进程
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在高级语言中,这些内存管理的细节对于用户来说不透明.在编程的时候,我们只需要记住上 ...
- Linux0.11内核--fork进程分析
[版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5597818.html ] 据说安卓应用里通过fork子进程的方式可以防止应用被杀,大概原理就是 ...
- java16 程序、进程、线程
一.程序.进程.线程 .程序:程序就是我们编写的代码,也就是指令集,是一个静态概念. .进程:操作系统调度我们的程序,动态概念,一个程序就是一个进程.进程是程序的一次动态执行过程,占用特定的地址空间, ...
- Android Init进程命令的执行和服务的启动
这里开始分析init进程中配置文件的解析,在配置文件中的命令的执行和服务的启动. 首先init是一个可执行文件,它的对应的Makfile是init/Android.mk. Android.mk定义了i ...
- 通过fork进程爆破canary
1.1.1 通过fork进程爆破canary ⑴.原理分析: 对fork而言,作用相当于自我复制,每一次复制出来的程序,内存布局都是一样的,当然canary值也一样.那我们就可以逐位爆破,如果程 ...
- linux fork进程请谨慎多个进程/线程共享一个 socket连接,会出现多个进程响应串联的情况。
昨天组内同学在使用php父子进程模式的时候遇到了一个比较诡异的问题 简单说来就是:因为fork,父子进程共享了一个redis连接.然后父子进程在发送了各自的redis请求分别获取到了对方的响应体. 复 ...
- 性能分析(1)- Java 进程导致 CPU 使用率升高,问题怎么定位?
性能分析小案例系列,可以通过下面链接查看哦 ps:这些分析小案例不能保证百分比正确,是博主学习过程中的总结,仅做参考 前提 本机有一个很占用 CPU 的项目,放在了 Tomcat 下启动着 如何定位 ...
- remove name="ProxyModule“会导致重复执行
<?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 ASP.NET 应用程序的详细信息,请访 ...
- 关于Java中的程序,进程和线程的详解...
程序:一段静态的代码,一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体,是应用软件执行的蓝本. 进程:是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个 ...
随机推荐
- 手把手教你整合 SpringMvc+Spring+MyBatis+Maven
注:该教程是参考孙宇老师的<SpringMvc+Spring+Mybatis+Maven整合视频教程1>整理的,花了我六个多小时,边复习视频边调代码边写教程,保证该教程每一步都能正确执行, ...
- centos添加php及mysql环境变量
在Linux CentOS系统上安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到环境变量之前,执行 “php -v”命令查看当前php版本信息时时 ...
- Ubuntu16.04 安装openssl
1 下载 https://www.openssl.org/source/ 2 解压 3 安装 # ./config --prefix=/usr/local --openssldir=/usr/loca ...
- Memcached stats sizes 命令
Memcached stats sizes 命令用于显示所有item的大小和个数. 该信息返回两列,第一列是 item 的大小,第二列是 item 的个数. 语法: stats sizes 命令的基本 ...
- nignx的master进程和worker进程的作用
ngnix进程启动启动后会有一个master进程和多个worker进程. master进程的主要作用: 1.读取并验证配置信息: 2.创建,绑定及关闭套接字: 3.启动,终止worker进程以及维护w ...
- PHP数组合并:[“+”运算符]、[array_merge]、[array_merge_recursive]区别
1.“+”运算符规则: 当两个数组的键名是数字键名或者字符串键名 $c = $a + $b 在$a后追加($b在$a中不存在的键名)键名和值注意: 1.不覆盖,只是追加不存在的键名和对应的值 2.键名 ...
- Python实现H5页面
from selenium import webdriver mobile_emulation = {'deviceName':'iPhone X'} options = webdriver.Chro ...
- 搭建selenium + Python环境的总结:
安装Python+Selenium 写博客是一个不错的选择,首先,是担心自己忘掉,其次,可以供大家做一个参考: 其实,这是自己第一次搭建Python环境(之前用了一周的Idle),还是比较容易的吧: ...
- slim(4621✨)
用于代码瘦身. 老鸟建议:不要混写js 和 html,如果避免不了,当前文件可以改为erb格式,混用slim和erb不是什么问题. git: https://github.com/slim-temp ...
- 2017 年你应该尝试的 25 个 Android 库
1.Lottie 由 Airbnb 推出,支持将 Adobe After Effects 动画通过 Bodymovin 导出成 JSON,并在手机上渲染它们.目前已经有超过 8600 颗 star,相 ...