src: add process.ppid

Fixes: https://github.com/nodejs/node/issues/14957
PR-URL: https://github.com/nodejs/node/pull/16839
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
cjihrig 2017-10-30 16:14:15 -04:00
parent 766cd1f59d
commit 3cacd34dc2
No known key found for this signature in database
GPG Key ID: 7434390BDBE9B9C5
3 changed files with 38 additions and 0 deletions

View File

@ -1416,6 +1416,19 @@ system platform on which the Node.js process is running. For instance
console.log(`This platform is ${process.platform}`);
```
## process.ppid
<!-- YAML
added: REPLACEME
-->
* {integer}
The `process.ppid` property returns the PID of the current parent process.
```js
console.log(`The parent process is pid ${process.ppid}`);
```
## process.release
<!-- YAML
added: v3.0.0

View File

@ -2906,6 +2906,12 @@ static void EnvEnumerator(const PropertyCallbackInfo<Array>& info) {
}
static void GetParentProcessId(Local<Name> property,
const PropertyCallbackInfo<Value>& info) {
info.GetReturnValue().Set(Integer::New(info.GetIsolate(), uv_os_getppid()));
}
static Local<Object> GetFeatures(Environment* env) {
EscapableHandleScope scope(env->isolate());
@ -3238,6 +3244,9 @@ void SetupProcessObject(Environment* env,
READONLY_PROPERTY(process, "pid", Integer::New(env->isolate(), getpid()));
READONLY_PROPERTY(process, "features", GetFeatures(env));
process->SetAccessor(FIXED_ONE_BYTE_STRING(env->isolate(), "ppid"),
GetParentProcessId);
auto need_immediate_callback_string =
FIXED_ONE_BYTE_STRING(env->isolate(), "_needImmediateCallback");
CHECK(process->SetAccessor(env->context(), need_immediate_callback_string,

View File

@ -0,0 +1,16 @@
'use strict';
require('../common');
const assert = require('assert');
const cp = require('child_process');
if (process.argv[2] === 'child') {
// The following console.log() call is part of the test's functionality.
console.log(process.ppid);
} else {
const child = cp.spawnSync(process.execPath, [__filename, 'child']);
assert.strictEqual(child.status, 0);
assert.strictEqual(child.signal, null);
assert.strictEqual(+child.stdout.toString().trim(), process.pid);
assert.strictEqual(child.stderr.toString().trim(), '');
}