turbo
turbo copied to clipboard
[turborepo] regression on handling SIGINT
What version of Turborepo are you using?
1.7.4
What package manager are you using / does the bug impact?
npm
What operating system are you using?
Linux
Describe the Bug
Referring to #444 and its implementation on #663, it looks like there was a behavioural regression introduced in 1.7.0
where SIGINT is no longer handled properly. The last working version was 1.6.3
.
The bug is related to the fact that when interrupting a program (^C
), turbo doesn't wait for the program to handle the SIGINT command and immediately terminates the process.
It is worth noting that the SIGINT instruction continues to run in the background, and the terminal becomes interactive again. This poses a problem when running turbo from a Docker container, for example, while Docker waits for the SIGINT instruction to be handled and then kills the container process. Since turbo doesn't wait for SIGINT to complete, docker simply kills the process prematurely. The expected behaviour here would be that of 1.6.3
.
Expected Behavior
Turbo should wait for the program to handle the SIGINT
instruction and only then exit the running process.
To Reproduce
./apps/bar/package.json
{
"name": "@foo/bar",
"scripts": {
"start": "trap 'echo wait…; sleep 3; echo done!; exit 0' SIGINT; sleep 10",
}
}
[email protected] (expected behaviour)
$ npx turbo run start --filter=@foo/bar --only
• Packages in scope: @foo/bar
• Running start in 1 packages
• Remote caching disabled
@foo/bar:start: cache miss, executing a0c8f8ecc5ad4cad
@foo/bar:start:
@foo/bar:start: > start
@foo/bar:start: > trap 'echo wait…; sleep 3; echo done!; exit 0' SIGINT; sleep 10
@foo/bar:start:
^C@foo/bar:start: wait… # <<< SIGINT
@foo/bar:start: done!
$ echo interactive again....
[email protected] (unexpected behaviour)
$ npx turbo run start --filter=@foo/bar --only
• Packages in scope: @foo/bar
• Running start in 1 packages
• Remote caching disabled
@foo/bar:start: cache miss, executing 52f6ea6626d6482f
@foo/bar:start:
@foo/bar:start: > start
@foo/bar:start: > trap 'echo wait…; sleep 3; echo done!; exit 0' SIGINT; sleep 10
@foo/bar:start:
^C@foo/bar:start: wait… # <<< SIGINT
$ echo interactive again
interactive again
$ @foo/bar:start: done! # <<< bg process
Reproduction Repo
No response