Skip to content

Commit 3cacd34

Browse files
committed
src: add process.ppid
Fixes: #14957 PR-URL: #16839 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: Gireesh Punathil <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent 766cd1f commit 3cacd34

File tree

3 files changed

+38
-0
lines changed

3 files changed

+38
-0
lines changed

doc/api/process.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1416,6 +1416,19 @@ system platform on which the Node.js process is running. For instance
14161416
console.log(`This platform is ${process.platform}`);
14171417
```
14181418

1419+
## process.ppid
1420+
<!-- YAML
1421+
added: REPLACEME
1422+
-->
1423+
1424+
* {integer}
1425+
1426+
The `process.ppid` property returns the PID of the current parent process.
1427+
1428+
```js
1429+
console.log(`The parent process is pid ${process.ppid}`);
1430+
```
1431+
14191432
## process.release
14201433
<!-- YAML
14211434
added: v3.0.0

src/node.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2906,6 +2906,12 @@ static void EnvEnumerator(const PropertyCallbackInfo<Array>& info) {
29062906
}
29072907

29082908

2909+
static void GetParentProcessId(Local<Name> property,
2910+
const PropertyCallbackInfo<Value>& info) {
2911+
info.GetReturnValue().Set(Integer::New(info.GetIsolate(), uv_os_getppid()));
2912+
}
2913+
2914+
29092915
static Local<Object> GetFeatures(Environment* env) {
29102916
EscapableHandleScope scope(env->isolate());
29112917

@@ -3238,6 +3244,9 @@ void SetupProcessObject(Environment* env,
32383244
READONLY_PROPERTY(process, "pid", Integer::New(env->isolate(), getpid()));
32393245
READONLY_PROPERTY(process, "features", GetFeatures(env));
32403246

3247+
process->SetAccessor(FIXED_ONE_BYTE_STRING(env->isolate(), "ppid"),
3248+
GetParentProcessId);
3249+
32413250
auto need_immediate_callback_string =
32423251
FIXED_ONE_BYTE_STRING(env->isolate(), "_needImmediateCallback");
32433252
CHECK(process->SetAccessor(env->context(), need_immediate_callback_string,

test/parallel/test-process-ppid.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
'use strict';
2+
require('../common');
3+
const assert = require('assert');
4+
const cp = require('child_process');
5+
6+
if (process.argv[2] === 'child') {
7+
// The following console.log() call is part of the test's functionality.
8+
console.log(process.ppid);
9+
} else {
10+
const child = cp.spawnSync(process.execPath, [__filename, 'child']);
11+
12+
assert.strictEqual(child.status, 0);
13+
assert.strictEqual(child.signal, null);
14+
assert.strictEqual(+child.stdout.toString().trim(), process.pid);
15+
assert.strictEqual(child.stderr.toString().trim(), '');
16+
}

0 commit comments

Comments
 (0)