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

fix: utilityProcess pid should be undefined after exit
This commit is contained in:
Shelley Vohr 2024-11-18 10:06:27 +01:00 коммит произвёл GitHub
Родитель 15ff999bdc
Коммит dd50afa8c2
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
3 изменённых файлов: 25 добавлений и 1 удалений

Просмотреть файл

@ -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.

Просмотреть файл

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

Просмотреть файл

@ -240,13 +240,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', () => {