Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

childprocess kill() results in -4048 EPERM error on windows since update to v21.6.2 #51766

Open
Uzlopak opened this issue Feb 15, 2024 · 10 comments · Fixed by libuv/libuv#4341
Open
Labels
child_process Issues and PRs related to the child_process subsystem. libuv Issues and PRs related to the libuv dependency or the uv binding. windows Issues and PRs related to the Windows platform.

Comments

@Uzlopak
Copy link
Contributor

Uzlopak commented Feb 15, 2024

Version

v21.6.2

Platform

Microsoft Windows NT 10.0.22621.0 x64

Subsystem

child_process

What steps will reproduce the bug?

Suddenly in latest undici the tests in test/node-test/debug.js fail if run under windows with node v21.6.2.

It fails under PowerShell and cmd.

It seems that there is suddenly a permission issue when trying to kill a child_process. With node v21.6.1 .kill() doesnt throw.

How often does it reproduce? Is there a required condition?

Always reproducable

What is the expected behavior? Why is that the expected behavior?

Should not throw (and close the child process)

What do you see instead?

PS C:\Users\Aras\Desktop\undici> node .\test\node-test\debug.js
✖ debug#websocket (175.6675ms)
  Error: kill EPERM
      at ChildProcess.kill (node:internal/child_process:512:26)
      at TestContext.<anonymous> (C:\Users\Aras\Desktop\undici\test\node-test\debug.js:48:9)
      at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
      at async Test.run (node:internal/test_runner/test:632:9)
      at async startSubtest (node:internal/test_runner/harness:218:3) {
    errno: -4048,
    code: 'EPERM',
    syscall: 'kill'
  }

✖ debug#fetch (174.8844ms)
  Error: kill EPERM
      at ChildProcess.kill (node:internal/child_process:512:26)
      at TestContext.<anonymous> (C:\Users\Aras\Desktop\undici\test\node-test\debug.js:83:9)
      at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
      at async Test.run (node:internal/test_runner/test:632:9)
      at async Test.processPendingSubtests (node:internal/test_runner/test:374:7) {
    errno: -4048,
    code: 'EPERM',
    syscall: 'kill'
  }

✖ debug#undici (150.1489ms)
  Error: kill EPERM
      at ChildProcess.kill (node:internal/child_process:512:26)
      at TestContext.<anonymous> (C:\Users\Aras\Desktop\undici\test\node-test\debug.js:121:9)
      at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
      at async Test.run (node:internal/test_runner/test:632:9)
      at async Test.processPendingSubtests (node:internal/test_runner/test:374:7) {
    errno: -4048,
    code: 'EPERM',
    syscall: 'kill'
  }

ℹ tests 3
ℹ suites 0
ℹ pass 0
ℹ fail 3
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 511.956

✖ failing tests:

test at test\node-test\debug.js:11:1
✖ debug#websocket (175.6675ms)
  Error: kill EPERM
      at ChildProcess.kill (node:internal/child_process:512:26)
      at TestContext.<anonymous> (C:\Users\Aras\Desktop\undici\test\node-test\debug.js:48:9)
      at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
      at async Test.run (node:internal/test_runner/test:632:9)
      at async startSubtest (node:internal/test_runner/harness:218:3) {
    errno: -4048,
    code: 'EPERM',
    syscall: 'kill'
  }

test at test\node-test\debug.js:51:1
✖ debug#fetch (174.8844ms)
  Error: kill EPERM
      at ChildProcess.kill (node:internal/child_process:512:26)
      at TestContext.<anonymous> (C:\Users\Aras\Desktop\undici\test\node-test\debug.js:83:9)
      at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
      at async Test.run (node:internal/test_runner/test:632:9)
      at async Test.processPendingSubtests (node:internal/test_runner/test:374:7) {
    errno: -4048,
    code: 'EPERM',
    syscall: 'kill'
  }

test at test\node-test\debug.js:86:1
✖ debug#undici (150.1489ms)
  Error: kill EPERM
      at ChildProcess.kill (node:internal/child_process:512:26)
      at TestContext.<anonymous> (C:\Users\Aras\Desktop\undici\test\node-test\debug.js:121:9)
      at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
      at async Test.run (node:internal/test_runner/test:632:9)
      at async Test.processPendingSubtests (node:internal/test_runner/test:374:7) {
    errno: -4048,
    code: 'EPERM',
    syscall: 'kill'
  }

Additional information

I assume that this bug is coming from libuv.

@targos
Copy link
Member

targos commented Feb 15, 2024

@nodejs/libuv

@richardlau richardlau added the windows Issues and PRs related to the Windows platform. label Feb 15, 2024
@Uzlopak
Copy link
Contributor Author

Uzlopak commented Feb 19, 2024

@targos

Should I open another issue in libuv?

@targos
Copy link
Member

targos commented Feb 20, 2024

Maybe? I don't know if that would be relevant without a repro using libuv directly.

FWIW this commit changed the implementation of the uv_kill function on Windows: libuv/libuv@129362f

@vtjnash

@targos targos added the child_process Issues and PRs related to the child_process subsystem. label Feb 20, 2024
@mcollina
Copy link
Member

mcollina commented Mar 4, 2024

@santigimeno could you take a look?

@santigimeno
Copy link
Member

So, I think there's a regression in libuv which might be solved in libuv/libuv#4341. Regardless, just curious why the need to call child.kill() in those tests as the child processes should exit gracefully.

@santigimeno santigimeno added the libuv Issues and PRs related to the libuv dependency or the uv binding. label Mar 5, 2024
@Uzlopak
Copy link
Contributor Author

Uzlopak commented Mar 5, 2024

@santigimeno

It spins up the server and then kills it. Was this way for quiete a while. i could have patched it, but then I could not have report this bug ;)

@santigimeno
Copy link
Member

This is fixed in libuv, so it'll be fixed once a new version reaches node.

@santigimeno santigimeno reopened this Mar 5, 2024
@Uzlopak
Copy link
Contributor Author

Uzlopak commented Mar 5, 2024

great job, thanks

@SimenB
Copy link
Member

SimenB commented Apr 26, 2024

Is it correct that the update in libuv did not land in Node 22 either? Is there any timeline for this?

@Uzlopak
Copy link
Contributor Author

Uzlopak commented Apr 26, 2024

I dont know. I just know that we patched our test in undici accordingly to not run into the issue again. So probably the bug exists still. Would need to check on a windows machine.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
child_process Issues and PRs related to the child_process subsystem. libuv Issues and PRs related to the libuv dependency or the uv binding. windows Issues and PRs related to the Windows platform.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants