PHP exec taskkill

4 Cevap php

Ben sadece bu yürütmek denedim:

function kill_hr(){

    exec("taskkill /IM uper.exe", $output = array(), $return);

    print_r($output);

    echo "<br />".$return;

}

Ancak, bu çıkış ve onun çok kullanışlı değil:

Array () 1

Sürecin bu yok zaman:

Array () 128

Bana 1 süreç var olduğunda verir neden ben çalışmak için çalışıyorum - bu izinleri bir sorun olduğunu? Eğer öyleyse, bunu nasıl düzeltebiliriz?

4 Cevap

Yardımlarınız için hepinize teşekkür ederim - Sonunda bu kullanarak süreci öldürmek başardı:

$output = shell_exec('taskkill /F /IM "uper.exe"');

Ben de exec ile çalışacağından emin değilim, ama önemli bir parçası zorlayarak /F olduğunu! :)

Ben daha önce bu sorunu yaşadım - geçmişte çalışmış ne bir kaç şey:

Solution #1

taskkill, Windows start komutu ile başlatın:

exec('start /B taskkill /IM notepad.exe', $output = array(), $return);

Solution #2

Kullanarak yeni bir komut satırı açın cmd.exe:

exec('cmd /c taskkill /IM notepad.exe', $output = array(), $return);

* Note: Ben PHP arka plan işlemlerini başlatmak için geçmişte her iki yöntem kullandım - Ben dönüş değerleri ne olacak emin değilim, bu yüzden deneme gerekir.

Diğer yanıtlar yanı sıra, komut tarafından döndürülen sayısal değeri Windows ERRORLEVEL denir. Komut satırında taskkill etrafında oynarken, son Errorlevel kullanarak görünür döndü yapabilirsiniz

echo %ERRORLEVEL%

$return değer programın döner değerdir. Windows, geri dönüş değerleri 0 ve 1 genellikle başarıyı göstermek için kullanılır, bu nedenle fesih başarılı iken kolayca söyleyebilirim.

Ancak, 128 dönüş değeri program geliştiriciler taskkill üzerinde kendilerini karar, yani keyfidir. 128 büyük olasılıkla işlem yok demektir.

Ne yazık ki, taskkill dönüş değerlerini belgeleyen herhangi bir belge varmış gibi görünmüyor.

Amacınız uper.exe mevcut olma önlemek için ise, 128 ve 1 bir dönüş değeri daha sonra hem kabul olurdu, ve kod olur:

function kill_hr()
{
    exec("taskkill /IM uper.exe", $output = array(), $return);
    return $return == 1 || $return == 128;
}

Fonksiyonu true dönecektir uper.exe başarıyla sonlandırıldı eğer, ya da ilk etapta çalışan değilse.

Edit: Yeniden okuma sonrası, siz aşağıdakileri deneyebilirsiniz; runas web sunucu kullanıcısı (bir yönetici komut isteminden) gibi bir komut istemini başlatmak için kullanın:

runas /user:account@machine cmd

Daha sonra web sunucusu olarak çalışan bir komut istemi olacak ve oradan taskkill komutu. Sonra büyük olasılıkla bir metin hata mesajı göreceksiniz.