# process

> How Elide supports Node's `process` global: the same object as `node:process`, with differences in `resourceUsage`, `send`, stdout and `nextTick` ordering.

`process` is a global; `node:process` and `elide:process` return the same object. It follows
[Node's `process`](https://nodejs.org/api/process.html).

## Example

```js
// process.mjs
process.on("exit", (code) => console.log("exit code", code));

console.log(typeof process.pid, typeof process.env.PATH, process.argv.length >= 2);
console.log(process.memoryUsage().rss > 0, process.hrtime.bigint() > 0n);

setTimeout(() => console.log("timeout"), 0);
Promise.resolve().then(() => console.log("promise"));
process.nextTick(() => console.log("nextTick"));
process.exitCode = 3;
```

`elide run process.mjs` prints:

```text
number string true
true true
nextTick
promise
timeout
exit code 3
```

The process exits with status 3.

## Differences from Node

- `process.resourceUsage` is not available.
- `process.send` and `process.disconnect` exist only in a child started with `child_process.fork()`.
- Replacing `process.stdout.write` also intercepts `console.log`.
- `process.nextTick` callbacks run before Promise and `queueMicrotask` callbacks; see [Timers](https://elide.help/docs/api-html-timers).

For `process.env` loading and subprocess behavior, see [Environment Variables](https://elide.help/docs/env-variables).

## Samples

- [Command-line arguments](https://elide.help/docs/code-samples#command-line-arguments)

<!-- api-reference:start 7778e4076f00 -->
## Reference

**Status:** Partial · 77 of 87 suite tests pass (88.5%) · since 1.1.0

### Exports

| Export | Kind | Status | Notes |
| --- | --- | --- | --- |
| `process.arch` | property | Full | CPU architecture of the process (e.g. "x64", "arm64") |
| `process.argv` | property | Full | Command-line arguments passed to the process, starting with the node executable path |
| `process.argv0` | property | Full | The original value of argv[0] before any modification by Node.js |
| `process.env` | property | Full | Object containing the process environment variables |
| `process.execArgv` | property | Full | Node.js-specific flags passed to the node executable |
| `process.execPath` | property | Full | Absolute path of the node executable |
| `process.pid` | property | Full | Process ID |
| `process.ppid` | property | Full | Parent process ID |
| `process.platform` | property | Full | Operating system platform (e.g. "linux", "darwin", "win32") |
| `process.title` | property | Full | Displayed process title (settable in most environments) |
| `process.version` | property | Full | Node.js version string (e.g. "v20.0.0") |
| `process.versions` | property | Full | Object mapping dependency names to their version strings |
| `process.abort()` | function | Full | Terminates the process immediately with a core dump (SIGABRT) |
| `process.cwd()` | function | Full | Returns the current working directory of the process |
| `process.chdir()` | function | Full | Changes the current working directory of the process |
| `process.exit()` | function | Full | Terminates the process with the given exit code |
| `process.getuid()` | function | Full | Returns the numeric user ID of the process owner |
| `process.getgid()` | function | Full | Returns the numeric group ID of the process owner |
| `process.geteuid()` | function | Full | Returns the effective numeric user ID |
| `process.getegid()` | function | Full | Returns the effective numeric group ID |
| `process.hrtime()` | function | Full | Returns the current high-resolution time as [seconds, nanoseconds] |
| `process.umask()` | function | Full | Gets or sets the file creation mode mask |
| `process.cpuUsage()` | function | Full | Returns the CPU time used since an optional reference point |
| `process.memoryUsage()` | function | Full | Returns a snapshot of the current process memory usage |
| `process.uptime()` | function | Full | Returns the number of seconds the current process has been running |
| `process.nextTick()` | function | Full | Schedules a callback to run after I/O events but before timers in the current event loop tick |
| `process.stdin` | property | Full | Readable stream connected to stdin |
| `process.stdout` | property | Full | Writable stream connected to stdout |
| `process.stderr` | property | Full | Writable stream connected to stderr |

### Not implemented

`addUncaughtExceptionCaptureCallback`, `debugPort`, `finalization`, `getBuiltinModule`, `report`, `resourceUsage`, `sourceMapsEnabled`.

**Tests:** [node-api `node:process`](https://github.com/elide-dev/testsuite/blob/main/reports/1.6.0%2B6e718933f/4cbcae6c33a8/node-api/node-api.md): 77 pass, 10 fail, 0 error, 6 skipped. Failing: `test-process-dlopen-error-message-crash.js`, `test-process-env-allowed-flags-are-documented.js`, `test-process-env-allowed-flags.js`, `test-process-exec-argv.js`, `test-process-execve-permission-fail.js`, `test-process-exit-code-validation.js`, `test-process-load-env-file.js`, `test-process-remove-all-signal-listeners.js`, and 2 more.
<!-- api-reference:end -->
