从 REST 调用 psexec 将其强制为 运行 两次
Calling psexec from REST forces it to run twice
我有一个 REST 服务,它有一个 POST 方法,该方法执行 psexec
命令,在远程桌面上启动不同的进程(取决于 POST 数据),并等待它们终止(psexec
正在 运行 没有 -d
标志)。如果这个过程需要超过 5 分钟到 运行(我遇到的问题大约需要 5 分钟),psexec
命令将被第二次执行,所以我的过程被启动了两次,当我从一个 cmd.exe
实例和一个新实例 运行s 启动它时,它的前一个实例被杀死。如果我 运行 psexec
命令带有不等待进程终止的 -d
标志,则进程正在 运行 正确,只有一次。是什么导致了这个问题?是 psexec
命令还是 REST 服务的问题(REST 使用 Express 在 Node.js 中编写)。只有当我从 Web 界面(浏览器)调用 REST 服务时才会发生这种情况,如果我直接从服务器调用它,则它是 运行 正确的。
给运行psexec
,我用的是child_process
module and its exec
function那个
spawns a shell then executes the command within that shell.
它有 timeout
选项,默认为 0。
我通过将 child_process.exec()
更改为 child_process.execSync()
解决了我的问题,这与
不同
the exception that the method will not return until the child process
has fully closed. When a timeout
has been encountered and killSignal
is sent, the method won't return until the process has completely exited.
其timeout
选项默认为undefined
。
同步方法会阻塞 Node.js 事件循环,暂停执行任何附加代码,直到衍生进程退出。
我有一个 REST 服务,它有一个 POST 方法,该方法执行 psexec
命令,在远程桌面上启动不同的进程(取决于 POST 数据),并等待它们终止(psexec
正在 运行 没有 -d
标志)。如果这个过程需要超过 5 分钟到 运行(我遇到的问题大约需要 5 分钟),psexec
命令将被第二次执行,所以我的过程被启动了两次,当我从一个 cmd.exe
实例和一个新实例 运行s 启动它时,它的前一个实例被杀死。如果我 运行 psexec
命令带有不等待进程终止的 -d
标志,则进程正在 运行 正确,只有一次。是什么导致了这个问题?是 psexec
命令还是 REST 服务的问题(REST 使用 Express 在 Node.js 中编写)。只有当我从 Web 界面(浏览器)调用 REST 服务时才会发生这种情况,如果我直接从服务器调用它,则它是 运行 正确的。
给运行psexec
,我用的是child_process
module and its exec
function那个
spawns a shell then executes the command within that shell.
它有 timeout
选项,默认为 0。
我通过将 child_process.exec()
更改为 child_process.execSync()
解决了我的问题,这与
the exception that the method will not return until the child process has fully closed. When a
timeout
has been encountered andkillSignal
is sent, the method won't return until the process has completely exited.
其timeout
选项默认为undefined
。
同步方法会阻塞 Node.js 事件循环,暂停执行任何附加代码,直到衍生进程退出。