English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

طرق تنفيذ قفل العمليات والمسارح المتعددة في php

为什么需要进程锁?

主要作用就是防止你重复执行同一程序,主要用在crontab中,当你设置了一个定时任务,然后每分钟执行一次,如果不加进程锁的话,之前的进程没有执行完的情况下。每分钟都会有新的进程生成了。加上进程锁之后,每次定时任务执行的时候,就会去判断之前的进程锁是否存在,如果存在就不执行。

1.单进程的情况的进程锁实现

直接来个例子好了,写个php脚本, 就先命名为process.php吧,代码如下:


ثم في بيئة Linux، قم بتشغيل هذا الكود، سيشتغل بشكل طبيعي في المرة الأولى، ولكن في المرة الثانية سيتم عرض رسالة Process already exists. وبعد ذلك، سيتم عرض نفس الرسالة في كل مرة يتم فيها تشغيلها، مما يعني أن عملية الفشل قد حدثت.

php process.php & // رمز & يشير إلى تشغيل php في الخلفية


يمكن استخدام الكود المذكور أعلاه في سكربتات الخطة الزمنية الخاصة بك، فقط أضفها في البداية. فهي تشبه إضافة قفل العمليات لسكربت واحد.

2. تنفيذ متعدد العمليات باستخدام قفل العمليات

ما ذكرته أعلاه هو قفل واحد لكل سكربت PHP، إذا كنت تريد تحقيق متعدد العمليات باستخدام قفل العمليات، فإن الأمر يتعلق بتمكين عملية واحدة من امتلاك عدة قفل العمليات.
يمكن تحقيق اسم قفل العمليات ببساطة بتغيير جزء من الكود المذكور أعلاه، بناءً على المعلمات المدخلة لتحديد اسم قفل العمليات، إذا كانت المعلمات المدخلة متطابقة فإنها ستتطابق مع نفس القفل.

if(!($argc > 1))
{
 $lock_file = dirname(__FILE__) . "/process.lock";
}
 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\n");
}
if (!flock($lock_file_handle, LOCK_EX + LOCK_NB)) {
 die(date("Y-m-d H:i:s") . " Process already exists.\n");
}
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، يجب توريث التحكم في console ليكي، حيث يمكنك تحقيق نقل المعلمات، use yii\console\Controller;
ثم في crontab، الأمر التالي، استخدم أمرYii المدمج لت�行رار المشاريع. ثم يمكن أن يكون رمز قفل العمليات كما هو في الأعلى.

* * * * * root /usr/local/bin/php /data/www/html/newVanish/yii controller_name/method passed_parameters > /dev/null 2>&1

4. أمر قتل العمليات

هذا بالتأكيد شيء في صندوق الأدوات الخاص بي، ولا أشارك به إلا بأشخاص معينين.
يمكنك حذف العمليات المطلوبة باستخدام أمر واحد فقط. الأمر التالي هو أمر يمكن استخدامه مباشرة ل�除 العمليات التي تحمل اسم process_name.

ps aux|grep process_name |grep -v grep|awk '{print $2}'|xargs kill -9

الخلاصة

هذا هو كل محتوى حول قفل العمليات والمحاولات المتعددة في PHP، آمل أن يساعد هذا المقال الجميع في تعلم أو استخدام PHP، إذا كان لديك أي أسئلة، يمكنك ترك تعليق للتفاعل، شكراً لدعمك لتعليمات النفخ.

البيان: محتوى هذا المقال تم جمعه من الإنترنت، يملك حقوق النشر الأصلي أصحاب المحتوى، تم إضافة المحتوى بواسطة المستخدمين عبر الإنترنت بشكل متعاوني، ويستخدم هذا الموقع فقط دون امتلاك حقوق الملكية، لم يتم تعديل المحتوى بشكل إنساني، ولا يتحمل هذا الموقع أي مسؤولية قانونية متعلقة بذلك. إذا كنت قد وجدت محتوى يشتبه في حقوق النسخ، فلا تتردد في إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (أثناء إرسال البريد الإلكتروني، يرجى استبدال #بـ @) لتقديم الشكوى، وتقديم الأدلة ذات الصلة، إذا تم التحقق من ذلك، فإن هذا الموقع سينتشر على الفور محتوى يشتبه في حقوق النسخ.

أنت قد تحب