English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Perché serve un blocco di processo?
Il suo principale scopo è prevenire l'esecuzione ripetuta dello stesso programma, utilizzato principalmente in crontab. Quando configuri un compito pianificato, che viene eseguito ogni minuto, senza il blocco di processo, se il processo precedente non è stato completato, ogni minuto verrà generato un nuovo processo. Con il blocco di processo, ogni volta che il compito pianificato viene eseguito, verificherà se esiste il blocco di processo precedente, se esiste non eseguirà.
1. Implementazione del blocco di processo per il singolo processo
Facciamo un esempio diretto, scriviamo uno script php, chiamiamolo process.php per cominciare, il codice è il seguente:
<?php $lock_file = dirname(__FILE__) . "/process.lock"; $lock_file_handle = fopen($lock_file, 'w'); se ($lock_file_handle === false) die("Non può creare il file di blocco {$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){ {}
Poi, nel contesto di Linux, esegui questo codice, la prima volta funzionerà correttamente, ma la seconda volta eseguita verrà visualizzato l'errore Process already exists. Dopo questo, ogni volta che esegui il codice, verrà visualizzato il messaggio di errore Process already exists, indicando che il processo è fallito.
php process.php & // il simbolo & indica l'esecuzione in background di php
Il codice sopra può essere utilizzato anche nei tuoi script pianificati in modo temporizzato, aggiungendo all'inizio. È equivalente a aggiungere un blocco di processo a uno script singolo.
2. Implementazione del blocco di processo per multi-processo
Come sopra menzionato, un blocco corrisponde a uno script PHP, per implementare la gestione multi-processo utilizzando il blocco di processo, è sufficiente permettere a un processo di avere più blocchi di processo.
Modifica leggermente il nome del blocco di processo del codice sopra per implementare, basandosi sui parametri passati per determinare il nome del blocco di processo, se i parametri passati sono identici, corrisponderanno allo stesso blocco.
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){ {}
Nel contesto di Linux, entra nella directory del file e esegui php process.php 1, quindi apri una nuova finestra e esegui php process.php 1, verrà visualizzato l'errore Process already exists. Tuttavia, se esegui php process.php 2, il programma funzionerà correttamente. Allo stesso modo, puoi passare due parametri, come php process.php 1 2, in questo caso corrisponderà un nuovo blocco di processo. Questa implementazione utilizza principalmente argc e argv, due parametri integrati di PHP, argc rappresenta il numero totale di parametri, argv rappresenta i parametri specifici utilizzati durante l'invocazione.
3. Implementazione del blocco dei processi in yii2
Per implementare il blocco dei processi multi-process in yii2, devi ereditare il controller di console di yii, in modo da poter passare i parametri, use yii\console\Controller;
Poi, nel crontab, il comando è il seguente, esegui il script di pianificazione temporizzata con il comando integrato di yii. Il codice del blocco dei processi è lo stesso dell'altro.
* * * * * root /usr/local/bin/php /data/www/html/newVanish/yii nome_controllore/metodo parametri_trasmettuti > /dev/null 2>&1
4. Comando per uccidere il processo
Questo è un segreto che tengo per me, non lo dico a chiunque.
Puoi eliminare il processo corrispondente con un singolo comando. Il comando seguente può eliminare tutti i processi con il nome del processo process_name. Per eliminare qualcosa, modifica semplicemente il nome_processo nel nome del processo che desideri eliminare.
ps aux|grep nome_processo |grep -v grep|awk '{print $2}'|xargs kill -9
Sommario
Questo è tutto il contenuto riguardante il blocco dei processi e l'esecuzione multi-process in PHP, spero che il contenuto di questo articolo possa essere utile per imparare o utilizzare PHP. Se hai domande, puoi lasciare un messaggio per discuterne, grazie per il supporto della guida a urlo.
Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il copyright è di proprietà del rispettivo proprietario, il contenuto è stato contribuito e caricato volontariamente dagli utenti di Internet, questo sito non detiene il diritto di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale correlata. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, questo sito eliminerà immediatamente il contenuto sospetto di violazione del copyright.