问题描述
我不完全理解为什么我不能杀死一个独立的进程。有人可以帮我吗?
服务器(子进程)
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
时没有关闭。有人可以指出我做错了什么吗?
解决方法
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
,
您说“子进程打开了一个新的终端窗口...”
基于此行为,看来您的操作系统是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上尝试过。)