<span><span><span class="hljs-variable">$cmd</span></span><span> = </span><span><span class="hljs-string">'exec sleep 100'</span></span><span>;
</span><span><span class="hljs-variable">$descriptorspec</span></span><span> = [
</span><span><span class="hljs-number">0</span></span><span> => [</span><span><span class="hljs-string">"pipe"</span></span><span>, </span><span><span class="hljs-string">"r"</span></span><span>],
</span><span><span class="hljs-number">1</span></span><span> => [</span><span><span class="hljs-string">"pipe"</span></span><span>, </span><span><span class="hljs-string">"w"</span></span><span>],
</span><span><span class="hljs-number">2</span></span><span> => [</span><span><span class="hljs-string">"pipe"</span></span><span>, </span><span><span class="hljs-string">"w"</span></span><span>]
];
</span><span><span class="hljs-variable">$process</span></span><span> = </span><span><span class="hljs-title function_ invoke__">proc_open</span></span><span>(</span><span><span class="hljs-variable">$cmd</span></span><span>, </span><span><span class="hljs-variable">$descriptorspec</span></span><span>, </span><span><span class="hljs-variable">$pipes</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_resource</span></span><span>(</span><span><span class="hljs-variable">$process</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">sleep</span></span><span>(</span><span><span class="hljs-number">2</span></span><span>); </span><span><span class="hljs-comment">// Simuler un traitement</span></span><span>
</span><span><span class="hljs-title function_ invoke__">proc_terminate</span></span><span>(</span><span><span class="hljs-variable">$process</span></span><span>, </span><span><span class="hljs-number">15</span></span><span>); </span><span><span class="hljs-comment">// essayer SIGTERM</span></span><span>
</span><span><span class="hljs-title function_ invoke__">sleep</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>);
</span><span><span class="hljs-variable">$status</span></span><span> = </span><span><span class="hljs-title function_ invoke__">proc_get_status</span></span><span>(</span><span><span class="hljs-variable">$process</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$status</span></span><span>[</span><span><span class="hljs-string">'running'</span></span><span>]) {
</span><span><span class="hljs-comment">// Si ça fonctionne toujours,essayer SIGKILL</span></span><span>
</span><span><span class="hljs-title function_ invoke__">proc_terminate</span></span><span>(</span><span><span class="hljs-variable">$process</span></span><span>, </span><span><span class="hljs-number">9</span></span><span>);
}
</span><span><span class="hljs-title function_ invoke__">proc_close</span></span><span>(</span><span><span class="hljs-variable">$process</span></span><span>); </span><span><span class="hljs-comment">// Nettoyer les ressources</span></span><span>
}
</span></span>
Utilisez POPEN () et EXEC () pour coopérer avec les commandes de kill externes pour gérer les processus.
Utilisez PCNTL_FORK () (CLI Environment) pour implémenter vous-même la gestion des processus sur Linux.
Pour les tâches complexes, envisagez d'utiliser un cadre de gestion de processus tels que SuperVisord au lieu de proc_open () .