@@ -4,7 +4,6 @@ import process from 'node:process';
4
4
import degit from 'degit' ;
5
5
import { exec } from 'tinyexec' ;
6
6
import { create } from '@sveltejs/create' ;
7
- import pstree , { type PS } from 'ps-tree' ;
8
7
9
8
export { addPnpmBuildDependencies } from '../utils/package-manager.ts' ;
10
9
export type ProjectVariant = 'kit-js' | 'kit-ts' | 'vite-js' | 'vite-ts' ;
@@ -122,31 +121,18 @@ export async function startPreview({
122
121
} ) ;
123
122
}
124
123
125
- async function getProcessTree ( pid : number ) {
126
- return new Promise < readonly PS [ ] > ( ( res , rej ) => {
127
- pstree ( pid , ( err , children ) => {
128
- if ( err ) rej ( err ) ;
129
- res ( children ) ;
130
- } ) ;
131
- } ) ;
132
- }
133
-
134
124
async function terminate ( pid : number ) {
135
- const children = await getProcessTree ( pid ) ;
136
- // the process tree is ordered from parents -> children,
137
- // so we'll iterate in the reverse order to terminate the children first
138
- for ( let i = children . length - 1 ; i >= 0 ; i -- ) {
139
- const child = children [ i ] ;
140
- const pid = Number ( child . PID ) ;
141
- kill ( pid ) ;
142
- }
143
- kill ( pid ) ;
144
- }
145
-
146
- function kill ( pid : number ) {
147
125
try {
148
- process . kill ( pid ) ;
126
+ if ( process . platform === 'win32' ) {
127
+ await exec ( `taskkill /pid ${ pid } /T /F` ) ; // on windows, use taskkill to terminate the process tree
128
+ } else {
129
+ process . kill ( - pid , 'SIGTERM' ) ; // Kill the process group
130
+ }
149
131
} catch {
150
- // this can happen if a process has been automatically terminated.
132
+ try {
133
+ process . kill ( pid , 'SIGTERM' ) ; // Kill just the process
134
+ } catch {
135
+ // Process might already be terminated
136
+ }
151
137
}
152
138
}
0 commit comments