关于 NodeJS 在 Windows 上杀死启动的进程问题
环境:Electron + NodeJS(windows10 ,不考虑 Linux)。
程序是这样的:
- node 使用 spawn,传入 execFile (有可能只是个 xxx.bat 脚本)和 args ,启动了一个 java 进程(监听端口 8080 )。
- 返回的
child_process
有一个 PID (如 11111 ),但它是属于启动的 cmd 的 PID ,实际 java 进程的 PID 是 22222 。 - 程序运行期间,会不断访问 java 程序的心跳接口。
- 退出前,使用
taskkill /T /F /PID 11111
,能把这两个进程直接杀掉,但是!该 8080 端口还有很多状态为TIME_WAIT
的连接没被一同 kill 掉,导致端口一直是被占用的状态。 当然,如果我直接用任务管理器将 java 进程强制终止,那也一样会有TIME_WAIT
的连接,需要等待一段时间,才能解除端口占用。
求教各位大佬,怎么才能一劳永逸的直接杀死进程。
PS: 并不知道这个进程的名称(就没办法用 taskkill /F /IM ${name} 来杀进程)是啥。
2 回复
我是按端口找到进程ID,再杀死进程,但杀死后出现的问题也跟你描述中的一样
我是在NW.JS环境中操作的,端口占用一直无法解除,因为我在多个webview里进行作业操作,除非把所有webview都关掉,端口占用才可能解除,只有一个webview存在,端口占用就无法解除