node-pty 1.1.0-beta27 → 1.1.0-beta28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/windowsPtyAgent.js +14 -13
- package/lib/windowsPtyAgent.js.map +1 -1
- package/lib/windowsTerminal.test.js +17 -14
- package/lib/windowsTerminal.test.js.map +1 -1
- package/package.json +1 -1
- package/scripts/increment-version.js +54 -0
- package/scripts/publish.js +7 -4
- package/src/native.d.ts +1 -1
- package/src/win/conpty.cc +66 -20
- package/src/windowsPtyAgent.ts +13 -11
- package/src/windowsTerminal.test.ts +16 -14
package/lib/windowsPtyAgent.js
CHANGED
|
@@ -9,8 +9,8 @@ exports.argsToCommandLine = exports.WindowsPtyAgent = void 0;
|
|
|
9
9
|
var fs = require("fs");
|
|
10
10
|
var os = require("os");
|
|
11
11
|
var path = require("path");
|
|
12
|
-
var net_1 = require("net");
|
|
13
12
|
var child_process_1 = require("child_process");
|
|
13
|
+
var net_1 = require("net");
|
|
14
14
|
var windowsConoutConnection_1 = require("./windowsConoutConnection");
|
|
15
15
|
var conptyNative;
|
|
16
16
|
var winptyNative;
|
|
@@ -109,7 +109,7 @@ var WindowsPtyAgent = /** @class */ (function () {
|
|
|
109
109
|
});
|
|
110
110
|
this._inSocket.setEncoding('utf8');
|
|
111
111
|
if (this._useConpty) {
|
|
112
|
-
var connect = this._ptyNative.connect(this._pty, commandLine, cwd, env, function (c) { return _this._$onProcessExit(c); });
|
|
112
|
+
var connect = this._ptyNative.connect(this._pty, commandLine, cwd, env, this._useConptyDll, function (c) { return _this._$onProcessExit(c); });
|
|
113
113
|
this._innerPid = connect.pid;
|
|
114
114
|
}
|
|
115
115
|
}
|
|
@@ -154,22 +154,23 @@ var WindowsPtyAgent = /** @class */ (function () {
|
|
|
154
154
|
}
|
|
155
155
|
};
|
|
156
156
|
WindowsPtyAgent.prototype.kill = function () {
|
|
157
|
-
var _this = this;
|
|
158
157
|
this._inSocket.readable = false;
|
|
159
158
|
this._outSocket.readable = false;
|
|
160
159
|
// Tell the agent to kill the pty, this releases handles to the process
|
|
161
160
|
if (this._useConpty) {
|
|
162
|
-
this.
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
161
|
+
if (!this._useConptyDll) {
|
|
162
|
+
this._getConsoleProcessList().then(function (consoleProcessList) {
|
|
163
|
+
consoleProcessList.forEach(function (pid) {
|
|
164
|
+
try {
|
|
165
|
+
process.kill(pid);
|
|
166
|
+
}
|
|
167
|
+
catch (e) {
|
|
168
|
+
// Ignore if process cannot be found (kill ESRCH error)
|
|
169
|
+
}
|
|
170
|
+
});
|
|
170
171
|
});
|
|
171
|
-
|
|
172
|
-
|
|
172
|
+
}
|
|
173
|
+
this._ptyNative.kill(this._pty, this._useConptyDll);
|
|
173
174
|
}
|
|
174
175
|
else {
|
|
175
176
|
// Because pty.kill closes the handle, it will kill most processes by itself.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windowsPtyAgent.js","sourceRoot":"","sources":["../src/windowsPtyAgent.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,uBAAyB;AACzB,uBAAyB;AACzB,2BAA6B;AAC7B
|
|
1
|
+
{"version":3,"file":"windowsPtyAgent.js","sourceRoot":"","sources":["../src/windowsPtyAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -84,18 +84,19 @@ function pollForProcessTreeSize(pid, size, intervalMs, timeoutMs) {
|
|
|
84
84
|
});
|
|
85
85
|
}
|
|
86
86
|
if (process.platform === 'win32') {
|
|
87
|
-
[true, false].forEach(function (
|
|
88
|
-
|
|
87
|
+
[[true, false], [true, true], [false, false]].forEach(function (_a) {
|
|
88
|
+
var useConpty = _a[0], useConptyDll = _a[1];
|
|
89
|
+
describe("WindowsTerminal (useConpty = " + useConpty + ", useConptyDll = " + useConptyDll + ")", function () {
|
|
89
90
|
describe('kill', function () {
|
|
90
91
|
it('should not crash parent process', function (done) {
|
|
91
|
-
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', [], { useConpty: useConpty });
|
|
92
|
+
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', [], { useConpty: useConpty, useConptyDll: useConptyDll });
|
|
92
93
|
term.kill();
|
|
93
94
|
// Add done call to deferred function queue to ensure the kill call has completed
|
|
94
95
|
term._defer(done);
|
|
95
96
|
});
|
|
96
97
|
it('should kill the process tree', function (done) {
|
|
97
98
|
this.timeout(10000);
|
|
98
|
-
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', [], { useConpty: useConpty });
|
|
99
|
+
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', [], { useConpty: useConpty, useConptyDll: useConptyDll });
|
|
99
100
|
// Start sub-processes
|
|
100
101
|
term.write('powershell.exe\r');
|
|
101
102
|
term.write('notepad.exe\r');
|
|
@@ -111,23 +112,25 @@ if (process.platform === 'win32') {
|
|
|
111
112
|
desiredState[list[1].pid] = false;
|
|
112
113
|
desiredState[list[2].pid] = true;
|
|
113
114
|
desiredState[list[3].pid] = false;
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
115
|
+
term.on('exit', function () {
|
|
116
|
+
pollForProcessState(desiredState).then(function () {
|
|
117
|
+
// Kill notepad before done
|
|
118
|
+
process.kill(list[2].pid);
|
|
119
|
+
done();
|
|
120
|
+
});
|
|
118
121
|
});
|
|
119
122
|
});
|
|
120
123
|
});
|
|
121
124
|
});
|
|
122
125
|
describe('resize', function () {
|
|
123
126
|
it('should throw a non-native exception when resizing an invalid value', function () {
|
|
124
|
-
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', [], { useConpty: useConpty });
|
|
127
|
+
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', [], { useConpty: useConpty, useConptyDll: useConptyDll });
|
|
125
128
|
assert.throws(function () { return term.resize(-1, -1); });
|
|
126
129
|
assert.throws(function () { return term.resize(0, 0); });
|
|
127
130
|
assert.doesNotThrow(function () { return term.resize(1, 1); });
|
|
128
131
|
});
|
|
129
132
|
it('should throw a non-native exception when resizing a killed terminal', function (done) {
|
|
130
|
-
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', [], { useConpty: useConpty });
|
|
133
|
+
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', [], { useConpty: useConpty, useConptyDll: useConptyDll });
|
|
131
134
|
term._defer(function () {
|
|
132
135
|
term.once('exit', function () {
|
|
133
136
|
assert.throws(function () { return term.resize(1, 1); });
|
|
@@ -150,7 +153,7 @@ if (process.platform === 'win32') {
|
|
|
150
153
|
// Skip test if git bash isn't installed
|
|
151
154
|
return;
|
|
152
155
|
}
|
|
153
|
-
var term = new windowsTerminal_1.WindowsTerminal(cmdCopiedPath, '/c echo "hello world"', { useConpty: useConpty });
|
|
156
|
+
var term = new windowsTerminal_1.WindowsTerminal(cmdCopiedPath, '/c echo "hello world"', { useConpty: useConpty, useConptyDll: useConptyDll });
|
|
154
157
|
var result = '';
|
|
155
158
|
term.on('data', function (data) {
|
|
156
159
|
result += data;
|
|
@@ -176,14 +179,14 @@ if (process.platform === 'win32') {
|
|
|
176
179
|
});
|
|
177
180
|
describe('On close', function () {
|
|
178
181
|
it('should return process zero exit codes', function (done) {
|
|
179
|
-
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', '/C exit', { useConpty: useConpty });
|
|
182
|
+
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', '/C exit', { useConpty: useConpty, useConptyDll: useConptyDll });
|
|
180
183
|
term.on('exit', function (code) {
|
|
181
184
|
assert.strictEqual(code, 0);
|
|
182
185
|
done();
|
|
183
186
|
});
|
|
184
187
|
});
|
|
185
188
|
it('should return process non-zero exit codes', function (done) {
|
|
186
|
-
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', '/C exit 2', { useConpty: useConpty });
|
|
189
|
+
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', '/C exit 2', { useConpty: useConpty, useConptyDll: useConptyDll });
|
|
187
190
|
term.on('exit', function (code) {
|
|
188
191
|
assert.strictEqual(code, 2);
|
|
189
192
|
done();
|
|
@@ -192,7 +195,7 @@ if (process.platform === 'win32') {
|
|
|
192
195
|
});
|
|
193
196
|
describe('Write', function () {
|
|
194
197
|
it('should accept input', function (done) {
|
|
195
|
-
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', '', { useConpty: useConpty });
|
|
198
|
+
var term = new windowsTerminal_1.WindowsTerminal('cmd.exe', '', { useConpty: useConpty, useConptyDll: useConptyDll });
|
|
196
199
|
term.write('exit\r');
|
|
197
200
|
term.on('exit', function () {
|
|
198
201
|
done();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windowsTerminal.test.js","sourceRoot":"","sources":["../src/windowsTerminal.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"windowsTerminal.test.js","sourceRoot":"","sources":["../src/windowsTerminal.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2019, Microsoft Corporation (MIT License).
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
const cp = require('child_process');
|
|
6
|
+
const fs = require('fs');
|
|
7
|
+
const path = require('path');
|
|
8
|
+
const packageJson = require('../package.json');
|
|
9
|
+
|
|
10
|
+
// Determine if this is a stable or beta release
|
|
11
|
+
const publishedVersions = getPublishedVersions();
|
|
12
|
+
const isStableRelease = !publishedVersions.includes(packageJson.version);
|
|
13
|
+
|
|
14
|
+
// Get the next version
|
|
15
|
+
const nextVersion = isStableRelease ? packageJson.version : getNextBetaVersion();
|
|
16
|
+
console.log(`Setting version to ${nextVersion}`);
|
|
17
|
+
|
|
18
|
+
// Set the version in package.json
|
|
19
|
+
const packageJsonFile = path.resolve(__dirname, '..', 'package.json');
|
|
20
|
+
packageJson.version = nextVersion;
|
|
21
|
+
fs.writeFileSync(packageJsonFile, JSON.stringify(packageJson, null, 2));
|
|
22
|
+
|
|
23
|
+
function getNextBetaVersion() {
|
|
24
|
+
if (!/^[0-9]+\.[0-9]+\.[0-9]+$/.exec(packageJson.version)) {
|
|
25
|
+
console.error('The package.json version must be of the form x.y.z');
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
const tag = 'beta';
|
|
29
|
+
const stableVersion = packageJson.version.split('.');
|
|
30
|
+
const nextStableVersion = `${stableVersion[0]}.${parseInt(stableVersion[1]) + 1}.0`;
|
|
31
|
+
const publishedVersions = getPublishedVersions(nextStableVersion, tag);
|
|
32
|
+
if (publishedVersions.length === 0) {
|
|
33
|
+
return `${nextStableVersion}-${tag}1`;
|
|
34
|
+
}
|
|
35
|
+
const latestPublishedVersion = publishedVersions.sort((a, b) => {
|
|
36
|
+
const aVersion = parseInt(a.substr(a.search(/[0-9]+$/)));
|
|
37
|
+
const bVersion = parseInt(b.substr(b.search(/[0-9]+$/)));
|
|
38
|
+
return aVersion > bVersion ? -1 : 1;
|
|
39
|
+
})[0];
|
|
40
|
+
const latestTagVersion = parseInt(latestPublishedVersion.substr(latestPublishedVersion.search(/[0-9]+$/)), 10);
|
|
41
|
+
return `${nextStableVersion}-${tag}${latestTagVersion + 1}`;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function getPublishedVersions(version, tag) {
|
|
45
|
+
const isWin32 = process.platform === 'win32';
|
|
46
|
+
const versionsProcess = isWin32 ?
|
|
47
|
+
cp.spawnSync('npm.cmd', ['view', packageJson.name, 'versions', '--json'], { shell: true }) :
|
|
48
|
+
cp.spawnSync('npm', ['view', packageJson.name, 'versions', '--json']);
|
|
49
|
+
const versionsJson = JSON.parse(versionsProcess.stdout);
|
|
50
|
+
if (tag) {
|
|
51
|
+
return versionsJson.filter(v => !v.search(new RegExp(`${version}-${tag}[0-9]+`)));
|
|
52
|
+
}
|
|
53
|
+
return versionsJson;
|
|
54
|
+
}
|
package/scripts/publish.js
CHANGED
|
@@ -12,11 +12,11 @@ fs.writeFileSync(`${process.env['HOME']}/.npmrc`, `//registry.npmjs.org/:_authTo
|
|
|
12
12
|
|
|
13
13
|
// Determine if this is a stable or beta release
|
|
14
14
|
const publishedVersions = getPublishedVersions();
|
|
15
|
-
const isStableRelease = publishedVersions.
|
|
15
|
+
const isStableRelease = !publishedVersions.includes(packageJson.version);
|
|
16
16
|
|
|
17
17
|
// Get the next version
|
|
18
|
-
|
|
19
|
-
console.log(`
|
|
18
|
+
const nextVersion = isStableRelease ? packageJson.version : getNextBetaVersion();
|
|
19
|
+
console.log(`Setting version to ${nextVersion}`);
|
|
20
20
|
|
|
21
21
|
// Set the version in package.json
|
|
22
22
|
const packageJsonFile = path.resolve(__dirname, '..', 'package.json');
|
|
@@ -53,7 +53,10 @@ function getNextBetaVersion() {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
function getPublishedVersions(version, tag) {
|
|
56
|
-
const
|
|
56
|
+
const isWin32 = process.platform === 'win32';
|
|
57
|
+
const versionsProcess = isWin32 ?
|
|
58
|
+
cp.spawnSync('npm.cmd', ['view', packageJson.name, 'versions', '--json'], { shell: true }) :
|
|
59
|
+
cp.spawnSync('npm', ['view', packageJson.name, 'versions', '--json']);
|
|
57
60
|
const versionsJson = JSON.parse(versionsProcess.stdout);
|
|
58
61
|
if (tag) {
|
|
59
62
|
return versionsJson.filter(v => !v.search(new RegExp(`${version}-${tag}[0-9]+`)));
|
package/src/native.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
interface IConptyNative {
|
|
6
6
|
startProcess(file: string, cols: number, rows: number, debug: boolean, pipeName: string, conptyInheritCursor: boolean, useConptyDll: boolean): IConptyProcess;
|
|
7
|
-
connect(ptyId: number, commandLine: string, cwd: string, env: string[], onExitCallback: (exitCode: number) => void): { pid: number };
|
|
7
|
+
connect(ptyId: number, commandLine: string, cwd: string, env: string[], useConptyDll: boolean, onExitCallback: (exitCode: number) => void): { pid: number };
|
|
8
8
|
resize(ptyId: number, cols: number, rows: number, useConptyDll: boolean): void;
|
|
9
9
|
clear(ptyId: number, useConptyDll: boolean): void;
|
|
10
10
|
kill(ptyId: number, useConptyDll: boolean): void;
|
package/src/win/conpty.cc
CHANGED
|
@@ -37,6 +37,13 @@ typedef void (__stdcall *PFNCLOSEPSEUDOCONSOLE)(HPCON hpc);
|
|
|
37
37
|
|
|
38
38
|
#endif
|
|
39
39
|
|
|
40
|
+
typedef struct _PseudoConsole
|
|
41
|
+
{
|
|
42
|
+
HANDLE hSignal;
|
|
43
|
+
HANDLE hPtyReference;
|
|
44
|
+
HANDLE hConPtyProcess;
|
|
45
|
+
} PseudoConsole;
|
|
46
|
+
|
|
40
47
|
struct pty_baton {
|
|
41
48
|
int id;
|
|
42
49
|
HANDLE hIn;
|
|
@@ -44,35 +51,56 @@ struct pty_baton {
|
|
|
44
51
|
HPCON hpc;
|
|
45
52
|
|
|
46
53
|
HANDLE hShell;
|
|
54
|
+
HANDLE pty_job_handle;
|
|
47
55
|
|
|
48
56
|
pty_baton(int _id, HANDLE _hIn, HANDLE _hOut, HPCON _hpc) : id(_id), hIn(_hIn), hOut(_hOut), hpc(_hpc) {};
|
|
49
57
|
};
|
|
50
58
|
|
|
51
|
-
static std::vector<pty_baton
|
|
59
|
+
static std::vector<std::unique_ptr<pty_baton>> ptyHandles;
|
|
52
60
|
static volatile LONG ptyCounter;
|
|
53
61
|
|
|
54
62
|
static pty_baton* get_pty_baton(int id) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
63
|
+
auto it = std::find_if(ptyHandles.begin(), ptyHandles.end(), [id](const auto& ptyHandle) {
|
|
64
|
+
return ptyHandle->id == id;
|
|
65
|
+
});
|
|
66
|
+
if (it != ptyHandles.end()) {
|
|
67
|
+
return it->get();
|
|
60
68
|
}
|
|
61
69
|
return nullptr;
|
|
62
70
|
}
|
|
63
71
|
|
|
64
72
|
static bool remove_pty_baton(int id) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
73
|
+
auto it = std::remove_if(ptyHandles.begin(), ptyHandles.end(), [id](const auto& ptyHandle) {
|
|
74
|
+
return ptyHandle->id == id;
|
|
75
|
+
});
|
|
76
|
+
if (it != ptyHandles.end()) {
|
|
77
|
+
ptyHandles.erase(it);
|
|
78
|
+
return true;
|
|
72
79
|
}
|
|
73
80
|
return false;
|
|
74
81
|
}
|
|
75
82
|
|
|
83
|
+
static BOOL InitPtyJobHandle(HANDLE* pty_job_handle) {
|
|
84
|
+
SECURITY_ATTRIBUTES attr;
|
|
85
|
+
memset(&attr, 0, sizeof(attr));
|
|
86
|
+
attr.bInheritHandle = FALSE;
|
|
87
|
+
*pty_job_handle = CreateJobObjectW(&attr, nullptr);
|
|
88
|
+
if (*pty_job_handle == NULL) {
|
|
89
|
+
return FALSE;
|
|
90
|
+
}
|
|
91
|
+
JOBOBJECT_EXTENDED_LIMIT_INFORMATION limits = {};
|
|
92
|
+
limits.BasicLimitInformation.LimitFlags =
|
|
93
|
+
JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION |
|
|
94
|
+
JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;
|
|
95
|
+
if (!SetInformationJobObject(*pty_job_handle,
|
|
96
|
+
JobObjectExtendedLimitInformation,
|
|
97
|
+
&limits,
|
|
98
|
+
sizeof(limits))) {
|
|
99
|
+
return FALSE;
|
|
100
|
+
}
|
|
101
|
+
return TRUE;
|
|
102
|
+
}
|
|
103
|
+
|
|
76
104
|
struct ExitEvent {
|
|
77
105
|
int exit_code = 0;
|
|
78
106
|
};
|
|
@@ -107,6 +135,8 @@ void SetupExitCallback(Napi::Env env, Napi::Function cb, pty_baton* baton) {
|
|
|
107
135
|
// so we only call CloseHandle for now.
|
|
108
136
|
CloseHandle(baton->hIn);
|
|
109
137
|
CloseHandle(baton->hOut);
|
|
138
|
+
CloseHandle(baton->hShell);
|
|
139
|
+
assert(remove_pty_baton(baton->id));
|
|
110
140
|
|
|
111
141
|
auto status = tsfn.BlockingCall(exit_event, callback); // In main thread
|
|
112
142
|
switch (status) {
|
|
@@ -304,7 +334,8 @@ static Napi::Value PtyStartProcess(const Napi::CallbackInfo& info) {
|
|
|
304
334
|
// We were able to instantiate a conpty
|
|
305
335
|
const int ptyId = InterlockedIncrement(&ptyCounter);
|
|
306
336
|
marshal.Set("pty", Napi::Number::New(env, ptyId));
|
|
307
|
-
ptyHandles.
|
|
337
|
+
ptyHandles.emplace_back(
|
|
338
|
+
std::make_unique<pty_baton>(ptyId, hIn, hOut, hpc));
|
|
308
339
|
} else {
|
|
309
340
|
throw Napi::Error::New(env, "Cannot launch conpty");
|
|
310
341
|
}
|
|
@@ -335,20 +366,22 @@ static Napi::Value PtyConnect(const Napi::CallbackInfo& info) {
|
|
|
335
366
|
std::stringstream errorText;
|
|
336
367
|
BOOL fSuccess = FALSE;
|
|
337
368
|
|
|
338
|
-
if (info.Length() !=
|
|
369
|
+
if (info.Length() != 6 ||
|
|
339
370
|
!info[0].IsNumber() ||
|
|
340
371
|
!info[1].IsString() ||
|
|
341
372
|
!info[2].IsString() ||
|
|
342
373
|
!info[3].IsArray() ||
|
|
343
|
-
!info[4].
|
|
344
|
-
|
|
374
|
+
!info[4].IsBoolean() ||
|
|
375
|
+
!info[5].IsFunction()) {
|
|
376
|
+
throw Napi::Error::New(env, "Usage: pty.connect(id, cmdline, cwd, env, useConptyDll, exitCallback)");
|
|
345
377
|
}
|
|
346
378
|
|
|
347
379
|
const int id = info[0].As<Napi::Number>().Int32Value();
|
|
348
380
|
const std::wstring cmdline(path_util::to_wstring(info[1].As<Napi::String>()));
|
|
349
381
|
const std::wstring cwd(path_util::to_wstring(info[2].As<Napi::String>()));
|
|
350
382
|
const Napi::Array envValues = info[3].As<Napi::Array>();
|
|
351
|
-
|
|
383
|
+
const bool useConptyDll = info[4].As<Napi::Boolean>().Value();
|
|
384
|
+
Napi::Function exitCallback = info[5].As<Napi::Function>();
|
|
352
385
|
|
|
353
386
|
// Fetch pty handle from ID and start process
|
|
354
387
|
pty_baton* handle = get_pty_baton(id);
|
|
@@ -426,6 +459,17 @@ static Napi::Value PtyConnect(const Napi::CallbackInfo& info) {
|
|
|
426
459
|
throw errorWithCode(info, "Cannot create process");
|
|
427
460
|
}
|
|
428
461
|
|
|
462
|
+
if (useConptyDll) {
|
|
463
|
+
if (!InitPtyJobHandle(&handle->pty_job_handle)) {
|
|
464
|
+
throw errorWithCode(info, "Initialize pty job handle failed");
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
PseudoConsole* server = reinterpret_cast<PseudoConsole*>(handle->hpc);
|
|
468
|
+
if (!AssignProcessToJobObject(handle->pty_job_handle, server->hConPtyProcess)) {
|
|
469
|
+
throw errorWithCode(info, "AssignProcessToJobObject for server failed");
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
|
|
429
473
|
// Update handle
|
|
430
474
|
handle->hShell = piClient.hProcess;
|
|
431
475
|
|
|
@@ -545,8 +589,10 @@ static Napi::Value PtyKill(const Napi::CallbackInfo& info) {
|
|
|
545
589
|
}
|
|
546
590
|
}
|
|
547
591
|
|
|
548
|
-
|
|
549
|
-
|
|
592
|
+
TerminateProcess(handle->hShell, 1);
|
|
593
|
+
if (useConptyDll) {
|
|
594
|
+
CloseHandle(handle->pty_job_handle);
|
|
595
|
+
}
|
|
550
596
|
}
|
|
551
597
|
|
|
552
598
|
return env.Undefined();
|
package/src/windowsPtyAgent.ts
CHANGED
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
import * as fs from 'fs';
|
|
8
8
|
import * as os from 'os';
|
|
9
9
|
import * as path from 'path';
|
|
10
|
+
import { fork } from 'child_process';
|
|
10
11
|
import { Socket } from 'net';
|
|
11
12
|
import { ArgvOrCommandLine } from './types';
|
|
12
|
-
import { fork } from 'child_process';
|
|
13
13
|
import { ConoutConnection } from './windowsConoutConnection';
|
|
14
14
|
|
|
15
15
|
let conptyNative: IConptyNative;
|
|
@@ -135,7 +135,7 @@ export class WindowsPtyAgent {
|
|
|
135
135
|
this._inSocket.setEncoding('utf8');
|
|
136
136
|
|
|
137
137
|
if (this._useConpty) {
|
|
138
|
-
const connect = (this._ptyNative as IConptyNative).connect(this._pty, commandLine, cwd, env, c => this._$onProcessExit(c));
|
|
138
|
+
const connect = (this._ptyNative as IConptyNative).connect(this._pty, commandLine, cwd, env, this._useConptyDll, c => this._$onProcessExit(c));
|
|
139
139
|
this._innerPid = connect.pid;
|
|
140
140
|
}
|
|
141
141
|
}
|
|
@@ -162,16 +162,18 @@ export class WindowsPtyAgent {
|
|
|
162
162
|
this._outSocket.readable = false;
|
|
163
163
|
// Tell the agent to kill the pty, this releases handles to the process
|
|
164
164
|
if (this._useConpty) {
|
|
165
|
-
this.
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
165
|
+
if (!this._useConptyDll) {
|
|
166
|
+
this._getConsoleProcessList().then(consoleProcessList => {
|
|
167
|
+
consoleProcessList.forEach((pid: number) => {
|
|
168
|
+
try {
|
|
169
|
+
process.kill(pid);
|
|
170
|
+
} catch (e) {
|
|
171
|
+
// Ignore if process cannot be found (kill ESRCH error)
|
|
172
|
+
}
|
|
173
|
+
});
|
|
172
174
|
});
|
|
173
|
-
|
|
174
|
-
|
|
175
|
+
}
|
|
176
|
+
(this._ptyNative as IConptyNative).kill(this._pty, this._useConptyDll);
|
|
175
177
|
} else {
|
|
176
178
|
// Because pty.kill closes the handle, it will kill most processes by itself.
|
|
177
179
|
// Process IDs can be reused as soon as all handles to them are
|
|
@@ -88,18 +88,18 @@ function pollForProcessTreeSize(pid: number, size: number, intervalMs: number =
|
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
if (process.platform === 'win32') {
|
|
91
|
-
[true, false].forEach((useConpty) => {
|
|
92
|
-
describe(`WindowsTerminal (useConpty = ${useConpty})`, () => {
|
|
91
|
+
[[true, false], [true, true], [false, false]].forEach(([useConpty, useConptyDll]) => {
|
|
92
|
+
describe(`WindowsTerminal (useConpty = ${useConpty}, useConptyDll = ${useConptyDll})`, () => {
|
|
93
93
|
describe('kill', () => {
|
|
94
94
|
it('should not crash parent process', (done) => {
|
|
95
|
-
const term = new WindowsTerminal('cmd.exe', [], { useConpty });
|
|
95
|
+
const term = new WindowsTerminal('cmd.exe', [], { useConpty, useConptyDll });
|
|
96
96
|
term.kill();
|
|
97
97
|
// Add done call to deferred function queue to ensure the kill call has completed
|
|
98
98
|
(<any>term)._defer(done);
|
|
99
99
|
});
|
|
100
100
|
it('should kill the process tree', function (done: Mocha.Done): void {
|
|
101
101
|
this.timeout(10000);
|
|
102
|
-
const term = new WindowsTerminal('cmd.exe', [], { useConpty });
|
|
102
|
+
const term = new WindowsTerminal('cmd.exe', [], { useConpty, useConptyDll });
|
|
103
103
|
// Start sub-processes
|
|
104
104
|
term.write('powershell.exe\r');
|
|
105
105
|
term.write('notepad.exe\r');
|
|
@@ -115,10 +115,12 @@ if (process.platform === 'win32') {
|
|
|
115
115
|
desiredState[list[1].pid] = false;
|
|
116
116
|
desiredState[list[2].pid] = true;
|
|
117
117
|
desiredState[list[3].pid] = false;
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
118
|
+
term.on('exit', () => {
|
|
119
|
+
pollForProcessState(desiredState).then(() => {
|
|
120
|
+
// Kill notepad before done
|
|
121
|
+
process.kill(list[2].pid);
|
|
122
|
+
done();
|
|
123
|
+
});
|
|
122
124
|
});
|
|
123
125
|
});
|
|
124
126
|
});
|
|
@@ -126,13 +128,13 @@ if (process.platform === 'win32') {
|
|
|
126
128
|
|
|
127
129
|
describe('resize', () => {
|
|
128
130
|
it('should throw a non-native exception when resizing an invalid value', () => {
|
|
129
|
-
const term = new WindowsTerminal('cmd.exe', [], { useConpty });
|
|
131
|
+
const term = new WindowsTerminal('cmd.exe', [], { useConpty, useConptyDll });
|
|
130
132
|
assert.throws(() => term.resize(-1, -1));
|
|
131
133
|
assert.throws(() => term.resize(0, 0));
|
|
132
134
|
assert.doesNotThrow(() => term.resize(1, 1));
|
|
133
135
|
});
|
|
134
136
|
it('should throw a non-native exception when resizing a killed terminal', (done) => {
|
|
135
|
-
const term = new WindowsTerminal('cmd.exe', [], { useConpty });
|
|
137
|
+
const term = new WindowsTerminal('cmd.exe', [], { useConpty, useConptyDll });
|
|
136
138
|
(<any>term)._defer(() => {
|
|
137
139
|
term.once('exit', () => {
|
|
138
140
|
assert.throws(() => term.resize(1, 1));
|
|
@@ -158,7 +160,7 @@ if (process.platform === 'win32') {
|
|
|
158
160
|
// Skip test if git bash isn't installed
|
|
159
161
|
return;
|
|
160
162
|
}
|
|
161
|
-
const term = new WindowsTerminal(cmdCopiedPath, '/c echo "hello world"', { useConpty });
|
|
163
|
+
const term = new WindowsTerminal(cmdCopiedPath, '/c echo "hello world"', { useConpty, useConptyDll });
|
|
162
164
|
let result = '';
|
|
163
165
|
term.on('data', (data) => {
|
|
164
166
|
result += data;
|
|
@@ -186,7 +188,7 @@ if (process.platform === 'win32') {
|
|
|
186
188
|
|
|
187
189
|
describe('On close', () => {
|
|
188
190
|
it('should return process zero exit codes', (done) => {
|
|
189
|
-
const term = new WindowsTerminal('cmd.exe', '/C exit', { useConpty });
|
|
191
|
+
const term = new WindowsTerminal('cmd.exe', '/C exit', { useConpty, useConptyDll });
|
|
190
192
|
term.on('exit', (code) => {
|
|
191
193
|
assert.strictEqual(code, 0);
|
|
192
194
|
done();
|
|
@@ -194,7 +196,7 @@ if (process.platform === 'win32') {
|
|
|
194
196
|
});
|
|
195
197
|
|
|
196
198
|
it('should return process non-zero exit codes', (done) => {
|
|
197
|
-
const term = new WindowsTerminal('cmd.exe', '/C exit 2', { useConpty });
|
|
199
|
+
const term = new WindowsTerminal('cmd.exe', '/C exit 2', { useConpty, useConptyDll });
|
|
198
200
|
term.on('exit', (code) => {
|
|
199
201
|
assert.strictEqual(code, 2);
|
|
200
202
|
done();
|
|
@@ -204,7 +206,7 @@ if (process.platform === 'win32') {
|
|
|
204
206
|
|
|
205
207
|
describe('Write', () => {
|
|
206
208
|
it('should accept input', (done) => {
|
|
207
|
-
const term = new WindowsTerminal('cmd.exe', '', { useConpty });
|
|
209
|
+
const term = new WindowsTerminal('cmd.exe', '', { useConpty, useConptyDll });
|
|
208
210
|
term.write('exit\r');
|
|
209
211
|
term.on('exit', () => {
|
|
210
212
|
done();
|