Bir işlemi sonlandırmak için nasıl

4 Cevap php

Ben bir PHP komut proc_open kullanarak bir süreç oluşturma.

Nasıl başka bir komut dosyası bu sona yok. Ben proc_open tarafından döndürülen kaynak geçmek mümkün değil.

Ben de (), bu PPID döndürür proc_get_status kullanarak çalıştı. Ben çocukların pid alamadım.

gelişimi env: WAMP

Herhangi bir giriş takdir edilmektedir.

Mithun

4 Cevap

Ben aslında başka bir yerden süreci öldürmek zorunda emin olmak için modeli yeniden inceleyin öneririz. Sizin kod hata ayıklama giderek daha zor olsun ve en önemsiz durumlarda ancak tüm koruyacaktır.

Bu kapsüllü tutmak için, size öldürmek istediğiniz sürecinde feshetme ve incelikle çıkmak isteyen sürecini sinyal verebilir. Aksi takdirde, diyor bir mesaj göndermek normal bir IPC kullanabilirsiniz: ".. Hey dostum kapatıldı, lütfen"

edit: 2. paragraf için, hala bunu yapmak için bir komut dosyası başlatıyoruz sona erebilir. bu iyi. ne kaçınmak istediğiniz şey bir kill -9 türüdür. Bunun yerine, incelikle süreç çıkış sağlar.

Sen süreci oluşturmak için bazı methond kullanabilirsiniz, bu yöntem genellikle yeni bir sürecin PID döndürür.

Bu Sizin için çalışıyor mu? :

$process = proc_open('php', $descriptorspec, $pipes, $cwd, $env);
$return_value = proc_close($process);

Siz diğer sürecini başlatmak için bu gibi bir şey kullanarak kapalı iyi:

$pid = shell_exec("nohup $Command > /dev/null 2>&1 & echo $!");

Orada sürecini yürütmek, ve bir çalışan işlem kimliğini verecek.

exec("ps $pid", $pState);     
$running = (count($pState) >= 2);

her zaman kullanabilirsiniz sonlandırmak için

exec("kill $pid");

O kimse gibi çalışıyorsa - - Ancak, PHP çalışır kullanıcı tarafından sahip olunan değil, süreçleri öldürmek olamaz Eğer kimse olarak yeni bir süreç başlayacağız ve sadece kullanıcı nobody altında çalışan süreçleri öldürmek mümkün.

Saf PHP, burada çözüm olduğundan yapmak için:

posix_kill($pid, 15); // SIGTERM = 15