作为工作的备忘录 只写重点了
下面的东西如果有问题或者你们发现逻辑上的BUG 赶紧联系我 毕竟是正式的东西 有问题需要及时发现处理呀 。。。 1042579697
工作原因,老大说不想每次有定时任务就在Linux上写个crontab,比较麻烦,他说起一个crontab,然后每隔五分钟跑一次,然后拿到需要执行的定时任务,开启子进程,让他自己去跑吧
好吧,那我就开始写
========文字逻辑哟==========
拿到一批需要跑的定时任务(假设3个),修改状态,防止这次没跑完,下次又开始了
【重点红红的】开始循环fork,上代码咯
declare(ticks = 1); #写在第一行的 反正我是这样的
xxoo = getmypid();
echo "我是正宗的父ID:" . getmypid()."\r\n";
for ($x = 0; $x < count($taskarr); $x++) {
pcntl_signal(SIGCHLD, 'sig_func');#一个信号接收,用于回收进程的
$pid = pcntl_fork();
if(-1 == $pid) {
die('Fork failed');
} else if ($pid > 0) {
// echo $x."第子进程的ID".$pid."\r\n";
// echo "正宗的父ID是:".$xxoo."\r\n";
// echo $pid."的父进程ID".getmypid()."\r\n";
if ($xxoo != getmypid()) {
// echo getmypid()."是个假的父ID\r\n";
posix_kill($pid, 9);
}
pcntl_waitpid($pid, $status); #等待进程结束,如果是僵尸进程直接回收 大概吧 我强行翻译成这样的
} else {
#子进程需要执行的逻辑代码
echo $x."----".getmypid()."\r\n";
}
}
function sig_func() {
pcntl_wait($status);
}
没有了 大概看到这也就知道怎么弄了 贴下我测试的时候 那个 pid>0里面的输出,也是循环3次,规律自己找吧
我是正宗的父ID:26012
0第子进程的ID26014
正宗的父ID是:26012
26014的父进程ID26012
0----26014
1第子进程的ID26015
正宗的父ID是:26012
26015的父进程ID26014
26014是个假的父ID
1----26015
2第子进程的ID26016
正宗的父ID是:26012
26016的父进程ID26015
26015是个假的父ID
2----26016
Done! :^)<br>
====================
Done! :^)<br>
====================
2第子进程的ID26017
正宗的父ID是:26012
26017的父进程ID26014
26014是个假的父ID
2----26017
Done! :^)<br>
====================
Done! :^)<br>
====================
1第子进程的ID26019
正宗的父ID是:26012
26019的父进程ID26012
1----26019
2第子进程的ID26020
正宗的父ID是:26012
26020的父进程ID26019
26019是个假的父ID
2----26020
Done! :^)<br>
====================
Done! :^)<br>
====================
2第子进程的ID26021
正宗的父ID是:26012
26021的父进程ID26012
2----26021
Done! :^)<br>
====================
Done! :^)<br>
====================