我有一个REST服务,它有一个POST方法执行psexec
命令,该命令启动远程桌面上的不同进程(取决于POST数据),并等待它们终止(psexec
正在没有-d
标志运行。如果该过程运行时间超过5分钟(我面临的问题需要大约5分钟),psexec
命令正在第二次执行,所以我的进程正在启动两次,前一个实例是当我从cmd.exe
实例启动它并且运行一个新实例时它被杀死。如果我运行带有psexec
标志的-d
命令,该标志不等待进程终止,则该进程只能正常运行一次。是什么导致了这个问题?它是psexec
命令还是REST服务的问题(REST是使用Express在Node.js中编写的)。这只有在我从Web界面(浏览器)调用REST服务时才会发生,如果我直接从服务器调用它,它正在正确运行。
答案 0 :(得分:0)
要运行psexec
,我使用的是child_process
module及其exec
function
生成一个shell,然后在该shell中执行该命令。
它有timeout
选项,默认为0.
我通过将child_process.exec()
改为child_process.execSync()
来解决我的问题。
该方法在子进程之前不会返回的异常 已完全关闭。遇到
timeout
并发送killSignal
后,该方法将不会返回,直到该流程完全退出。
其timeout
选项默认为undefined
。
同步方法会阻塞Node.js事件循环,暂停执行任何其他代码,直到生成的进程退出。