Rumah >pembangunan bahagian belakang >masalah PHP >Apakah yang perlu saya lakukan jika php pcntl_signal tidak mempunyai kesan?

Apakah yang perlu saya lakukan jika php pcntl_signal tidak mempunyai kesan?

藏色散人
藏色散人asal
2021-10-15 09:48:192509semak imbas

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.

Apakah yang perlu saya lakukan jika php pcntl_signal tidak mempunyai kesan?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn