npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

demurgos-foreground-child

v1.6.0-beta.2

Published

Run a child as if it's the foreground process. Give it stdio. Exit when it exits.

Downloads

107

Readme

foreground-child

Build Status Build status

Run a child as if it's the foreground process. Give it stdio.

Mostly this module is here to support some use cases around wrapping child processes for test coverage and such.

USAGE

const fg = require('foreground-child')

// cats out this file
const {child, close} = fg('cat', [__filename])

// At this point, it's best to just do nothing else.
// return or whatever.
// If the child gets a signal, or just exits, then this
// parent process will exit in the same way.

// Close is a promise resolved when the child is closed.
// You can use it to inspected its exit code and exit the parent process.
close.then((close) => {
  // You can use this handler to perform an action before exiting the
  // foreground child.
  console.log(close.code);
  console.log(close.status);
  close(); // Kills the parent process using the result of the child process.
});

Caveats

The "normal" standard IO file descriptors (0, 1, and 2 for stdin, stdout, and stderr respectively) are shared with the child process. Additionally, if there is an IPC channel set up in the parent, then messages are proxied to the child on file descriptor 3.

However, in Node, it's possible to also map arbitrary file descriptors into a child process. In these cases, foreground-child will not map the file descriptors into the child. If file descriptors 0, 1, or 2 are used for the IPC channel, then strange behavior may happen (like printing IPC messages to stderr, for example).

Note that a SIGKILL will always kill the parent process, and never the child process, because SIGKILL cannot be caught or proxied. The only way to do this would be if Node provided a way to truly exec a process as the new foreground program in the same process space, without forking a separate child process.

API

The canonical documentation is in the source code. See index.ts.

  • fg(file, args): Original API
  • fg.compat: Alias for fg.
  • fg.spawn(file, args, options): New API, based on Node's cp.spawn.
  • fg.proxy(parent, child): Forward IO, IPC and signals from parent to child.