I have a php file that is requested from 3 different browsers simultaneously and repeatedly. This php file starts a process using exec(). Given that the php file is requested several times, exec() also occurs repeatedly.
I got unwanted results after a while so I had to start testing.
This is what it looks like when it goes according to the instructions:
php starts
php calls exec()
exe does its thing and returns
php done
5/5 times it will be as above, but all of a sudden it will be like this instead:
php starts
php calls exec()
exe does its thing and returns
php does not proceed from exec, even though the child process has ended. (step 3)
The interesting thing is that when it gets stuck at exec, it is released when another request to the same script has been completed.
I can not figure out what’s going on here. I really hope someone else has an idea
Have you used the second and third parameters of the exec() function to see if there is any error info being returned and or an error result code? This might tell you more of what is going on. Also is the exec() function returning false in this scenario?
Perhaps something is going on in the external program and it isn’t properly telling PHP that it has ended because it ended abnormally. Could be a simple exception being thrown or maybe some kind of race condition. Let us know if, and what kind of, errors you might be seeing.
When the script finally continues from exec, exec returns without problem. Both the output and the return-status is as usual, non error.
The exe returns without problem, I know because it writes to a log. Then its parent (the php script) doesn’t continue, it waits. BUT, it later continues as mentioned earlier when another request to the same script has been completed. I dont know if it continues when the other entire script has reached the end or as soon as the exec part of the other script is done. But one of the scenarios happens.
I have a try catch, nothing gets thrown.
The exe files monitor different path’s in windows. When something happens in a directory they return. So when the php-script gets stuck at exec, at the exact time that I make a change/edit in a direcotry that another php-script child process is monitoring then the locked/stucked script finally continues (and it has the program output and everything’s alright)