Objective: My script will download a remote file upon form submission, since the file might be big, I would like to fork off a process and let the user go on with his/her life.
Bir komut örneği:
wget-q - limit-rate = 1k - çalışır = 10 "http://helios.gsfc.nasa.gov/image_euv_press.jpg"-O / web / varlık / content / image / image_euv_press.jpg
Yöntem çalıştı:
PCNTL çatallaşma,
$pid = pcntl_fork();
if ( $pid == -1 ) { exit; } else if ( $pid ) { //We are the parent process, the pid is child pid right? return $pid; } else { // We are the child process exec($command.' > /dev/null'); // > /dev/null & posix_kill(getmypid(),9); return; }
Ben PID olsun ama o riski ben nginx kullanıyorum çünkü çatallı süreç zombi haline gelir ve bu var -> php-fpm (test edilmiş ve geçersiz php-fpm süreçlerin bir sürü birkaç kez çalıştıran üzerine, teyit), ben olurdu Sadece zombi ortadan kaldırmak için sunucuyu yeniden başlatmanız, bu tükenme saldırıyı PID beni bırakacaktı? (Ben tahmin ediyorum)
Arka plan işlemi:
exec($command . ' > /dev/null &');//background process $proc = passthru ("ps aux | grep '$command'");//search for the command echo var_dump($proc); $pid = (int)(next(explode(' ',$proc)));//parse the pid (not implemented)
Question: the background process method works but it's not clean, is there a better way to fork off a process to download and get that wget command PID so I can kill it later?.
Ben $ yankılanan denedim! sadece PID ama exec ('echo $!') bir şey çıkmıyorsa almak için exec yaptıktan sonra, ben her exec farklı bir "boşluk" olduğunu çünkü düşünüyorum
I '> / dev / null 2> / dev / null &' eklendi Benim terminalde komutun sonuna gibi bir şey dönecekti: [3] 30751, ama php exec yoluyla, bu PID döndü yakalamak için hiçbir yolu yoktur.
Teşekkür ederim.