Bagaimana cara menjalankan proses latar belakang di PHP?

Apakah yang proses latar belakang dan mengapa kita membutuhkan mereka?

Sebuah proses yang berjalan di belakang layar (yaitu di latar belakang) dan tanpa campur tangan pengguna disebut proses latar belakang. Pencatatan debug/kesalahan, pemantauan sistem apa pun dengan grafana atau kibana, pemberitahuan pengguna, pekerjaan penjadwalan, dan penerbitan beberapa data adalah contoh khas dari proses latar belakang. Proses latar belakang biasanya merupakan proses anak yang dibuat oleh proses kontrol untuk memproses tugas komputasi. Setelah pembuatan, proses anak akan berjalan sendiri, melakukan tugas independen dari status proses induk.

Ada banyak cara untuk menjalankan pekerjaan di latar belakang. Crontab, multithreading di java, go routine di golang adalah contoh kasus tersebut.

Untuk menjalankan suatu proses di ubuntu, kita cukup mengetikkan perintah di terminal. Misalnya, untuk menjalankan file PHP, kita menggunakan perintah berikut:

php filename.php

Di PHP, kita tidak bisa langsung menjalankan pekerjaan proses apa pun di latar belakang bahkan jika pekerjaan induk dihentikan. Sebelum kita mengetahui cara menjalankan proses di latar belakang, mari kita ketahui cara menjalankan perintah terminal dari skrip atau program PHP. Untuk mencapai fungsi ini kita dapat menggunakan eksekutif dan shell_exec fungsi dalam PHP.

Contoh perintah untuk menjalankan perintah apa pun dengan PHP adalah:

PHP

<?php 

  shell_exec(sprintf('%s > /dev/null 2>&1 &', "echo 4"));

?>

Ada poin penting dari kode di atas:

  • Output (STDOUT) skrip harus diarahkan ke file. /dev/null menunjukkan bahwa kita tidak mencatat output.
  • Kesalahan (STDERR) juga harus diarahkan ke file. 2>&1 berarti STDERR dialihkan ke STDOUT dan karenanya ke nirwana.
  • Final & memberi tahu perintah untuk jalankan di latar belakang.

Kita dapat memeriksa status proses yang sedang berjalan dengan perintah ps, misalnya:

ps -ef

Jadi, untuk menjalankan proses latar belakang dari PHP, kita cukup menggunakan fungsi exec atau shell_exec untuk menjalankan perintah terminal apa pun dan dalam perintah itu, kita cukup menambahkan & pada yang terakhir sehingga proses dapat berjalan di latar belakang.

Di bawah ini adalah implementasi dari pendekatan di atas:

PHP

<?php

   

function run($command, $outputFile = '/dev/null') {

    $processId = shell_exec(sprintf(

        '%s > %s 2>&1 & echo $!',

        $command,

        $outputFile

    ));

      

      print_r("processID of process in background is: "

        . $processId);

}

 

run("sleep 5");

 

print_r("current processID is: ".getmypid());

 

?>

Keluaran

processID of process in background is: 19926
current processID is: 19924