Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
861a1c21
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
861a1c21
编写于
6月 14, 2019
作者:
D
Daniel Imms
提交者:
GitHub
6月 14, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #74896 from microsoft/alexr00/terminalExitRace
Terminal race between process exit and on ready listeners
上级
c419355b
b63c9f98
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
15 addition
and
16 deletion
+15
-16
src/vs/workbench/api/node/extHostTerminalService.ts
src/vs/workbench/api/node/extHostTerminalService.ts
+1
-1
src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts
...kbench/contrib/terminal/browser/terminalProcessManager.ts
+5
-6
src/vs/workbench/contrib/terminal/common/terminal.ts
src/vs/workbench/contrib/terminal/common/terminal.ts
+1
-1
src/vs/workbench/contrib/terminal/common/terminalProcessExtHostProxy.ts
...ch/contrib/terminal/common/terminalProcessExtHostProxy.ts
+3
-3
src/vs/workbench/contrib/terminal/node/terminalProcess.ts
src/vs/workbench/contrib/terminal/node/terminalProcess.ts
+5
-5
未找到文件。
src/vs/workbench/api/node/extHostTerminalService.ts
浏览文件 @
861a1c21
...
...
@@ -535,7 +535,7 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
// Fork the process and listen for messages
this
.
_logService
.
debug
(
`Terminal process launching on ext host`
,
shellLaunchConfig
,
initialCwd
,
cols
,
rows
,
env
);
const
p
=
new
TerminalProcess
(
shellLaunchConfig
,
initialCwd
,
cols
,
rows
,
env
,
terminalConfig
.
get
(
'
windowsEnableConpty
'
)
as
boolean
,
this
.
_logService
);
p
.
onProcess
IdReady
(
pid
=>
this
.
_proxy
.
$sendProcessPid
(
id
,
pid
));
p
.
onProcess
Ready
((
e
:
{
pid
:
number
,
cwd
:
string
})
=>
this
.
_proxy
.
$sendProcessPid
(
id
,
e
.
pid
));
p
.
onProcessTitleChanged
(
title
=>
this
.
_proxy
.
$sendProcessTitle
(
id
,
title
));
p
.
onProcessData
(
data
=>
this
.
_proxy
.
$sendProcessData
(
id
,
data
));
p
.
onProcessExit
(
exitCode
=>
this
.
_onProcessExit
(
id
,
exitCode
));
...
...
src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts
浏览文件 @
861a1c21
...
...
@@ -50,6 +50,7 @@ export class TerminalProcessManager implements ITerminalProcessManager {
private
_latency
:
number
=
-
1
;
private
_latencyRequest
:
Promise
<
number
>
;
private
_latencyLastMeasured
:
number
=
0
;
private
_initialCwd
:
string
;
private
readonly
_onProcessReady
=
new
Emitter
<
void
>
();
public
get
onProcessReady
():
Event
<
void
>
{
return
this
.
_onProcessReady
.
event
;
}
...
...
@@ -138,8 +139,9 @@ export class TerminalProcessManager implements ITerminalProcessManager {
}
});
this
.
_process
.
onProcessIdReady
(
pid
=>
{
this
.
shellProcessId
=
pid
;
this
.
_process
.
onProcessReady
((
e
:
{
pid
:
number
,
cwd
:
string
})
=>
{
this
.
shellProcessId
=
e
.
pid
;
this
.
_initialCwd
=
e
.
cwd
;
this
.
_onProcessReady
.
fire
();
// Send any queued data that's waiting
...
...
@@ -207,10 +209,7 @@ export class TerminalProcessManager implements ITerminalProcessManager {
}
public
getInitialCwd
():
Promise
<
string
>
{
if
(
!
this
.
_process
)
{
return
Promise
.
resolve
(
''
);
}
return
this
.
_process
.
getInitialCwd
();
return
Promise
.
resolve
(
this
.
_initialCwd
);
}
public
getCwd
():
Promise
<
string
>
{
...
...
src/vs/workbench/contrib/terminal/common/terminal.ts
浏览文件 @
861a1c21
...
...
@@ -763,7 +763,7 @@ export interface IWindowsShellHelper extends IDisposable {
export
interface
ITerminalChildProcess
{
onProcessData
:
Event
<
string
>
;
onProcessExit
:
Event
<
number
>
;
onProcess
IdReady
:
Event
<
number
>
;
onProcess
Ready
:
Event
<
{
pid
:
number
,
cwd
:
string
}
>
;
onProcessTitleChanged
:
Event
<
string
>
;
/**
...
...
src/vs/workbench/contrib/terminal/common/terminalProcessExtHostProxy.ts
浏览文件 @
861a1c21
...
...
@@ -18,8 +18,8 @@ export class TerminalProcessExtHostProxy extends Disposable implements ITerminal
public
readonly
onProcessData
:
Event
<
string
>
=
this
.
_onProcessData
.
event
;
private
readonly
_onProcessExit
=
this
.
_register
(
new
Emitter
<
number
>
());
public
readonly
onProcessExit
:
Event
<
number
>
=
this
.
_onProcessExit
.
event
;
private
readonly
_onProcess
IdReady
=
this
.
_register
(
new
Emitter
<
number
>
()
);
public
readonly
onProcessIdReady
:
Event
<
number
>
=
this
.
_onProcessIdReady
.
event
;
private
readonly
_onProcess
Ready
=
new
Emitter
<
{
pid
:
number
,
cwd
:
string
}
>
(
);
public
get
onProcessReady
():
Event
<
{
pid
:
number
,
cwd
:
string
}
>
{
return
this
.
_onProcessReady
.
event
;
}
private
readonly
_onProcessTitleChanged
=
this
.
_register
(
new
Emitter
<
string
>
());
public
readonly
onProcessTitleChanged
:
Event
<
string
>
=
this
.
_onProcessTitleChanged
.
event
;
...
...
@@ -72,7 +72,7 @@ export class TerminalProcessExtHostProxy extends Disposable implements ITerminal
}
public
emitPid
(
pid
:
number
):
void
{
this
.
_onProcess
IdReady
.
fire
(
pid
);
this
.
_onProcess
Ready
.
fire
({
pid
,
cwd
:
''
}
);
}
public
emitExit
(
exitCode
:
number
):
void
{
...
...
src/vs/workbench/contrib/terminal/node/terminalProcess.ts
浏览文件 @
861a1c21
...
...
@@ -29,8 +29,8 @@ export class TerminalProcess implements ITerminalChildProcess, IDisposable {
public
get
onProcessData
():
Event
<
string
>
{
return
this
.
_onProcessData
.
event
;
}
private
readonly
_onProcessExit
=
new
Emitter
<
number
>
();
public
get
onProcessExit
():
Event
<
number
>
{
return
this
.
_onProcessExit
.
event
;
}
private
readonly
_onProcess
IdReady
=
new
Emitter
<
number
>
();
public
get
onProcess
IdReady
():
Event
<
number
>
{
return
this
.
_onProcessId
Ready
.
event
;
}
private
readonly
_onProcess
Ready
=
new
Emitter
<
{
pid
:
number
,
cwd
:
string
}
>
();
public
get
onProcess
Ready
():
Event
<
{
pid
:
number
,
cwd
:
string
}
>
{
return
this
.
_onProcess
Ready
.
event
;
}
private
readonly
_onProcessTitleChanged
=
new
Emitter
<
string
>
();
public
get
onProcessTitleChanged
():
Event
<
string
>
{
return
this
.
_onProcessTitleChanged
.
event
;
}
...
...
@@ -83,7 +83,7 @@ export class TerminalProcess implements ITerminalChildProcess, IDisposable {
const
ptyProcess
=
pty
.
spawn
(
shellLaunchConfig
.
executable
!
,
args
,
options
);
this
.
_ptyProcess
=
ptyProcess
;
this
.
_processStartupComplete
=
new
Promise
<
void
>
(
c
=>
{
this
.
onProcess
Id
Ready
(()
=>
c
());
this
.
onProcessReady
(()
=>
c
());
});
ptyProcess
.
on
(
'
data
'
,
data
=>
{
this
.
_onProcessData
.
fire
(
data
);
...
...
@@ -111,7 +111,7 @@ export class TerminalProcess implements ITerminalChildProcess, IDisposable {
this
.
_titleInterval
=
null
;
this
.
_onProcessData
.
dispose
();
this
.
_onProcessExit
.
dispose
();
this
.
_onProcess
Id
Ready
.
dispose
();
this
.
_onProcessReady
.
dispose
();
this
.
_onProcessTitleChanged
.
dispose
();
}
...
...
@@ -162,7 +162,7 @@ export class TerminalProcess implements ITerminalChildProcess, IDisposable {
}
private
_sendProcessId
(
ptyProcess
:
pty
.
IPty
)
{
this
.
_onProcess
IdReady
.
fire
(
ptyProcess
.
pid
);
this
.
_onProcess
Ready
.
fire
({
pid
:
ptyProcess
.
pid
,
cwd
:
this
.
_initialCwd
}
);
}
private
_sendProcessTitle
(
ptyProcess
:
pty
.
IPty
):
void
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录