Code Monkey home page Code Monkey logo

Comments (3)

kelunik avatar kelunik commented on May 23, 2024

Unfortunately, this is exactly what it's designed to do. The issue is that PHP doesn't open FDs with the close on exec option, so any child process will inherit the file descriptors. We shutdown the sockets so they don't stay open in case any child process is started while the socket was open.

from byte-stream.

withinboredom avatar withinboredom commented on May 23, 2024

The issue is that PHP doesn't open FDs with the close on exec option, so any child process will inherit the file descriptors

This is pretty much how things are done in Linux. In fact, after a fork() in C, you usually do something like this and manually close them all yourself; but generally, you don't want to break them in the parent.

Alternatively, call pcntl_unshare(1024) in the child to disassociate the FD table with the parent. Granted, it's PHP so a lot happens between fork and your call to unshare... so YMMV.

Or, if you're lucky enough to be on BSD, there's pcntl_rfork which allows you to fork without FDs being copied.

This should work IMHO, fwiw:

$pid = pcntl_fork();
if($pid === 0) {
  foreach (EventLoop::getIdentifiers() as $identifier) {
    EventLoop::cancel($identifier);
  }
  // clean process?
}

But now if any destructors get called in a child, for any reason (such as when the child dies), the entire program crashes and/or corrupts things in databases (depending on what gets destructed and in what order).

from byte-stream.

withinboredom avatar withinboredom commented on May 23, 2024

For the record, this was simply resolved by using the ZTS version of PHP.

from byte-stream.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.