美工统筹SEO,为企业电子商务营销助力!
php中完成历程锁与多历程的体例
一佰互联网站建造(www.taishanly.com) 宣布日期 2020-04-26 09:03:51 阅读数: 111
为甚么须要历程锁?
首要感化便是避免你反复履行统一法式,首要用在crontab中,当你设置了一个按时使命,而后每分钟履行一次,若是不加历程锁的话,之前的历程不履行完的情况下。每分钟城市有新的历程天生了。加上历程锁以后,每次按时使命履行的时辰,就会去判定之前的历程锁是不是存在,若是存在就不履行。
1.单历程的情况的历程锁完成
间接来个例子好了,写个php剧本, 就先定名为process.php吧,代码以下:
<?php $lock_file = dirname(__FILE__) . "/process.lock"; $lock_file_handle = fopen($lock_file, "w"); if ($lock_file_handle === false) die("Can not create lock file {$lock_file} "); if (!flock($lock_file_handle, LOCK_EX + LOCK_NB)) { die(date("Y-m-d H:i:s") . " Process already exists. "); } while(1){ }
而后在linux情况下,履行这个代码,第一次会普通运转,而后第二次运转的时辰就会提醒:Process already exists.
以后不管履行几多次城市呈现这个提醒表现历程失利了。
php process.php & //&标记表现在背景运转php
上面的代码一样能够操纵在你按时打算的剧本里,在开首加上就行了。相称于对单个剧本加上历程锁。
2.历程锁完成多历程
上面说的是一个锁对应一个php剧本,那要用历程锁完成多历程的话,实在便是让一个历程能够有多个历程锁就行了。
对上面的代码的历程锁的名字局部略加点窜便可完成,按照传出去的参数来决议历程锁的名字,若是传出去的参数分歧则对应统一个锁。
if(!($argc > 1)) { $lock_file = dirname(__FILE__) . "/process.lock"; }else{ unset($argv[0]); $lock_file = dirname(__FILE__) . "/process". implode(".", $argv) .".lock"; } $lock_file_handle = fopen($lock_file, "w"); if ($lock_file_handle === false){ die("Can not create lock file $lock_file "); } if (!flock($lock_file_handle, LOCK_EX + LOCK_NB)) { die(date("Y-m-d H:i:s") . " Process already exists. "); } while(1){ }
在linux情况下。进入文件地点目次,履行php process.php 1, 而后新开个窗口,在履行php process.php 1,就会提醒Process already exists这个毛病,可是若是你履行的是php process.php 2,就会普通运转,一样,你能够传两个参数,如php process.php 1 2,如许的话,对应的又是新的历程锁。这个完成首要用到的是argc和argv 这两个php自带的参数,argc表现参数总数,argv 表现详细挪用的时辰用的是哪一个参数。
3.历程锁在yii2中的完成
在yii2中要完成多历程的历程锁的话,要担当yii的console里的节制器,如许能完成参数的通报,use yiiconsoleController;
而后在crontab中,号令以下,用yii自带的号令来履行按时剧本。而后历程锁的代码和上面的一样就能够够了。
* * * * * root /usr/local/bin/php /data/www/html/newVanish/yii 节制器名/体例 通报的参数 > /dev/null 2>&1
4.杀死历程的号令
这个相对是压箱底的工具了,普通人我不告知他。
经由进程一条号令就能够删除对应的历程。上面的号令便是能够间接删除历程名字为 process_name 的一切历程。要删除甚么只需间接将 process_name点窜成你想要删除的历程名字就能够够了
ps aux|grep process_name |grep -v grep|awk "{print $2}"|xargs kill -9
总结
以上便是对于php中历程锁与多历程完成的全数内容,但愿这篇文章的内容对大师进修或利用PHP能有所赞助,若是有疑难大师能够留言交换,感谢大师对网页设想的撑持。