php pcntl_signal tidak mempunyai kesan kerana pcntl secara automatik akan memulakan semula panggilan sistem yang terganggu secara lalai Prestasi luaran ialah panggilan sistem tidak boleh diganggu.
Persekitaran pengendalian artikel ini: sistem Windows 7, PHP versi 7.1, komputer DELL G3
Apakah yang perlu saya lakukan jika php pcntl_signal tidak berfungsi?
php pcntl_signal penggunaan dan langkah berjaga-jaga
Baru-baru ini saya perlu membina pelayan berbilang proses berdasarkan php. Untuk memulakan semula dengan anggun, anda perlu menangkap isyarat SIGTERM yang dihantar oleh bunuh, jadi pcntl_signal digunakan.
Pada mulanya saya dapati isyarat yang ditangkap adalah tidak sah dan tidak boleh memasuki fungsi pemprosesan isyarat. Saya mengkaji dokumen dan mendapati bahawa saya perlu menjalankan declare(ticks = 1); penjelasan mengatakan bahawa ia adalah untuk menjana jam dan sebagainya. Selepas menambah, proses induk boleh menerima isyarat.
Tetapi proses kanak-kanak masih tidak dapat menerima isyarat Selepas menyemak untuk masa yang lama, saya tidak melihat sebarang pengecualian Proses kanak-kanak biasanya menyekat socket_accept Saya mengesyaki bahawa panggilan sistem tidak boleh diganggu menukarnya kepada 1 gelung sementara, anda boleh berjaya memasuki fungsi pemprosesan gangguan.
Kemudian saya mencari dan mendapati bahawa pcntl secara automatik akan memulakan semula panggilan sistem yang terganggu secara lalai, dan prestasi luaran ialah panggilan sistem tidak boleh diganggu.
Melihat kembali pada manual pada masa ini, ternyata pcntl_signal mempunyai parameter ketiga, yang juga merupakan parameter pilihan Ia membolehkan kami memutuskan sama ada untuk memulakan semula panggilan sistem secara automatik .
Pengenalan kepada fungsi pcntl_signal
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
pcntl_signal — Pasang pemproses isyarat
Penerangan
pcntl_signal(int $signo, callback $handler, bool $restart_syscalls = true): bool
Fungsi pcntl_signal() memasang pemproses isyarat baharu untuk isyarat yang ditentukan oleh signo.
Parameter
signo
Nombor isyarat.
pengendali
Pengendali isyarat boleh menjadi nama fungsi atau kaedah yang dicipta oleh pengguna, atau ia boleh menjadi pemalar sistem SIG_IGN (Anotasi: Abaikan pengendali isyarat) atau SIG_DFL (isyarat lalai pengendali).
Nota:
Perhatikan bahawa apabila anda menggunakan kaedah objek, kiraan rujukan objek ditambah supaya ia berterusan sehingga anda menukarnya kepada pemprosesan lain atau skrip tamat.
restart_syscalls
Menentukan sama ada permulaan semula panggilan sistem tersedia apabila isyarat tiba. (Nota terjemahan: Selepas menyemak maklumat, parameter ini bermakna sama ada panggilan sistem dimulakan semula dari awal apabila panggilan sistem diganggu oleh isyarat. Walau bagaimanapun, menurut http://bugs.php.net/bug.php?id =52121, parameter ini Tidak sah kerana pepijat)
Atas ialah kandungan terperinci Apakah yang perlu saya lakukan jika php pcntl_signal tidak mempunyai kesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!