Bug #81358 [Opn->Csd]: PHP hangs when the first signal sent

From: Date: Mon, 16 Aug 2021 15:25:01 +0000
Subject: Bug #81358 [Opn->Csd]: PHP hangs when the first signal sent
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-235872@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=81358&edit=1 ID: 81358 User updated by: abolfazl dot ziaratban at gmail dot com Reported by: abolfazl dot ziaratban at gmail dot com Summary: PHP hangs when the first signal sent -Status: Open +Status: Closed Type: Bug Package: Program Execution Operating System: CentOS PHP Version: 8.0.9 Block user comment: N Private report: N New Comment: Yes, I realized. I did not pay attention to their default value. nikic thanks. Previous Comments: ------------------------------------------------------------------------ [2021-08-16 15:15:18] nikic@php.net > SIGUSR1 and SIGUSR2 are User-defined signals. > I thought these signals were for me. > Why the php using this signals for terminate the process? PHP isn't doing anything -- signals have a default disposition, which is Terminate for all of SIGALRM, SIGUSR1 and SIGUSR2. Check "man 7 signal" for a list of default dispositions. You can define a custom signal action using pcntl_signal(), which will override the default disposition. Of course, it will only take effect after the pcntl_signal() call actually happens, so it won't make a difference if SIGUSR1 arrives too early. ------------------------------------------------------------------------ [2021-08-16 15:10:19] abolfazl dot ziaratban at gmail dot com The main problem is : test2.php does not run when sending SIGUSR1. > because the SIGUSR1 default action is to terminate the process Why? SIGUSR1 and SIGUSR2 are User-defined signals. I thought these signals were for me. Why the php using this signals for terminate the process? Ok i put assume that signals are for terminate the process but why does the SIGALRM signal behave similarly(acts like SIGUSR1)? New Example : test1.php $proc = proc_open('php /root/test2.php',[],$p); posix_kill(proc_get_status($proc)['pid'],SIGALRM); while(proc_get_status($proc)['running']) sleep(1); echo "End !"; test2.php mkdir('/root/a'); In this example, directory a is not created and test2.php does not actually run. ------------------------------------------------------------------------ [2021-08-16 12:35:53] nikic@php.net Can you clarify what the actual issue here is? Is it the "does not run" part? That seems expected to me, because the SIGUSR1 default action is to terminate the process, so if the signal arrives before the echo can execute, nothing will be printed. Or is there an actual hang here, and if so, how does it look like. Does the outer "php test1.php" call itself hang indefinitely? ------------------------------------------------------------------------ [2021-08-14 02:49:35] abolfazl dot ziaratban at gmail dot com fix bug : $proc = proc_open('php test2.php',[],$_); sleep(1); #fix posix_kill(proc_get_status($proc)['pid'],SIGUSR1); ------------------------------------------------------------------------ [2021-08-14 02:47:44] abolfazl dot ziaratban at gmail dot com . ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=81358 -- Edit this bug report at https://bugs.php.net/bug.php?id=81358&edit=1

« previous php.bugs (#235872) next »