2
2
* Copyright (C) Microsoft Corporation. All rights reserved.
3
3
*--------------------------------------------------------*/
4
4
5
+ import { randomBytes } from 'crypto' ;
5
6
import { inject , injectable } from 'inversify' ;
7
+ import { tmpdir } from 'os' ;
6
8
import * as path from 'path' ;
7
9
import * as vscode from 'vscode' ;
8
10
import { DebugType } from '../../common/contributionUtils' ;
9
11
import { EventEmitter } from '../../common/events' ;
12
+ import { IFsUtils } from '../../common/fsUtils' ;
13
+ import { ILogger } from '../../common/logging' ;
10
14
import { AnyLaunchConfiguration , ITerminalLaunchConfiguration } from '../../configuration' ;
11
15
import { ErrorCodes } from '../../dap/errors' ;
12
16
import { ProtocolError } from '../../dap/protocolError' ;
13
- import { tmpdir } from 'os' ;
14
- import { randomBytes } from 'crypto' ;
15
17
import { FS , FsPromises } from '../../ioc-extras' ;
18
+ import { IStopMetadata , ITarget } from '../targets' ;
16
19
import {
17
20
hideDebugInfoFromConsole ,
18
21
INodeBinaryProvider ,
19
- NodeBinaryProvider ,
20
22
NodeBinary ,
23
+ NodeBinaryProvider ,
21
24
} from './nodeBinaryProvider' ;
22
- import { ILogger } from '../../common/logging' ;
23
- import { IFsUtils } from '../../common/fsUtils' ;
25
+ import { IProcessTelemetry , IRunData , NodeLauncherBase } from './nodeLauncherBase' ;
24
26
import { IProgram } from './program' ;
25
- import { IStopMetadata , ITarget } from '../targets' ;
26
- import { NodeLauncherBase , IProcessTelemetry , IRunData } from './nodeLauncherBase' ;
27
27
28
28
class VSCodeTerminalProcess implements IProgram {
29
29
public readonly stopped : Promise < IStopMetadata > ;
@@ -44,7 +44,11 @@ class VSCodeTerminalProcess implements IProgram {
44
44
}
45
45
46
46
public stop ( ) {
47
- this . terminal . dispose ( ) ;
47
+ // send ctrl+c to sigint any running processs (vscode/#108289)
48
+ this . terminal . sendText ( '\x03' ) ;
49
+ // and then destroy it on the next event loop tick
50
+ setTimeout ( ( ) => this . terminal . dispose ( ) , 1 ) ;
51
+
48
52
return this . stopped ;
49
53
}
50
54
}
@@ -136,11 +140,17 @@ export class TerminalNodeLauncher extends NodeLauncherBase<ITerminalLaunchConfig
136
140
this . terminalCreatedEmitter . fire ( terminal ) ;
137
141
138
142
terminal . show ( ) ;
139
- this . program = new VSCodeTerminalProcess ( terminal ) ;
143
+ const program = ( this . program = new VSCodeTerminalProcess ( terminal ) ) ;
140
144
141
145
if ( runData . params . command ) {
142
146
terminal . sendText ( runData . params . command , true ) ;
143
147
}
148
+
149
+ program . stopped . then ( result => {
150
+ if ( program === this . program ) {
151
+ this . onProgramTerminated ( result ) ;
152
+ }
153
+ } ) ;
144
154
}
145
155
146
156
/**
0 commit comments