我不完全理解为什么我不能杀死一个独立的进程。有人可以帮我吗?
服务器(子进程)
const server = spawn(
'npm',
[
'run',
'watch:be',
],
{
detached: true,
},
);
等待服务器启动并运行
await waitOn({
resources: [
`https://localhost:${process.env.SERVER_PORT}`,
],
delay: 1000,
timeout: 30000,
});
console.log('server is up and running');
再等几秒钟
await new Promise((resolve, reject): void => {
setTimeout((): void => {
resolve();
}, 2000);
});
console.log('Run test');
杀死子服务器
server.kill();
console.log('Shutdown server');
所有这些都在同一个文件中。
子进程打开了一个新的终端窗口(这是预期的,当它执行spawn
时),但是在kill
时没有关闭。有人可以指出我做错了什么吗?
答案 0 :(得分:1)
rdd = sc.textFile("test.csv")
rdd = rdd.map(lambda line: line.replace('\"','').split(','))
def isHeader(row): return 'ID' in str(row)
rdd1 = rdd.filter(isHeader)
rdd2 = rdd.filter(lambda x: not(isHeader(x))).map(lambda line: [line[0], line[1], int(line[2]), int(line[3])])
rdd1.union(rdd2).collect()
[['ID', 'Area', 'Postcode', 'Amount'],
['1234/232', 'City', 8479, 20000],
['5987/215', 'Metro', 1111, 25000]]
根据node.js文档,server.kill();
方法向子进程发送信号。当您使用subprocess.kill()
选项时,该节点将为子进程创建一个单独的进程组,并且不再属于同一进程。
detached
这就是使用detached <boolean>: Prepare child to run independently of its parent process
时kill
不适合使用的原因。
对此已在此处进行了讨论: https://github.com/nodejs/node/issues/2098
如以上链接中所建议,您应使用detached
终止该进程(https://nodejs.org/api/process.html#process_process_kill_pid_signal)。这可能适合您:
process.kill
答案 1 :(得分:0)
您说“子进程打开了一个新的终端窗口...”
基于此行为,看来您的操作系统是Windows。
在Windows上,将
options.detached
设置为true
可使子进程在父进程退出后继续运行。该孩子将拥有自己的控制台窗口。为子进程启用后,将无法禁用它。
对于process.kill
,第二个arg是您要发送的信号。默认情况下,此信号为SIGTERM
。但是,根据Node.js文档的Signal Events部分,Windows似乎不支持SIGTERM
。
Windows上不支持
'SIGTERM'
,可以监听它。
也许尝试
process.kill(server.pid, 'SIGHUP')
或
process.kill(server.pid, 'SIGINT')
(这在macOS上有效,但我没有在Windows上尝试过。)