fix: utilityProcess pid should be undefined after exit (#44693)

fix: utilityProcess pid should be undefined after exit

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
This commit is contained in:
trop[bot] 2024-11-18 13:43:23 -06:00 committed by GitHub
parent a6a0c4cb6d
commit 313f9030d2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 25 additions and 1 deletions

View file

@ -92,6 +92,8 @@ the child process exits, then the value is `undefined` after the `exit` event is
```js
const child = utilityProcess.fork(path.join(__dirname, 'test.js'))
console.log(child.pid) // undefined
child.on('spawn', () => {
console.log(child.pid) // Integer
})
@ -101,6 +103,8 @@ child.on('exit', () => {
})
```
**Note:** You can use the `pid` to determine if the process is currently running.
#### `child.stdout`
A `NodeJS.ReadableStream | null` that represents the child process's stdout.

View file

@ -254,6 +254,8 @@ void UtilityProcessWrapper::HandleTermination(uint64_t exit_code) {
if (pid_ != base::kNullProcessId)
GetAllUtilityProcessWrappers().Remove(pid_);
pid_ = base::kNullProcessId;
CloseConnectorPort();
EmitWithoutEvent("exit", exit_code);
Unpin();

View file

@ -210,13 +210,31 @@ describe('utilityProcess module', () => {
it('is valid when child process launches successfully', async () => {
const child = utilityProcess.fork(path.join(fixturesPath, 'empty.js'));
await once(child, 'spawn');
expect(child.pid).to.not.be.null();
expect(child).to.have.property('pid').that.is.a('number');
});
it('is undefined when child process fails to launch', async () => {
const child = utilityProcess.fork(path.join(fixturesPath, 'does-not-exist.js'));
expect(child.pid).to.be.undefined();
});
it('is undefined before the child process is spawned succesfully', async () => {
const child = utilityProcess.fork(path.join(fixturesPath, 'empty.js'));
expect(child.pid).to.be.undefined();
await once(child, 'spawn');
child.kill();
});
it('is undefined when child process is killed', async () => {
const child = utilityProcess.fork(path.join(fixturesPath, 'empty.js'));
await once(child, 'spawn');
expect(child).to.have.property('pid').that.is.a('number');
expect(child.kill()).to.be.true();
await once(child, 'exit');
expect(child.pid).to.be.undefined();
});
});
describe('stdout property', () => {