从REST调用psexec会强制它运行两次

时间:2017-08-04 01:37:00

标签: rest psexec

我有一个REST服务,它有一个POST方法执行psexec命令,该命令启动远程桌面上的不同进程(取决于POST数据),并等待它们终止(psexec正在没有-d标志运行。如果该过程运行时间超过5分钟(我面临的问题需要大约5分钟),psexec命令正在第二次执行,所以我的进程正在启动两次,前一个实例是当我从cmd.exe实例启动它并且运行一个新实例时它被杀死。如果我运行带有psexec标志的-d命令,该标志不等待进程终止,则该进程只能正常运行一次。是什么导致了这个问题?它是psexec命令还是REST服务的问题(REST是使用Express在Node.js中编写的)。这只有在我从Web界面(浏览器)调用REST服务时才会发生,如果我直接从服务器调用它,它正在正确运行。

1 个答案:

答案 0 :(得分:0)

要运行psexec,我使用的是child_process module及其exec function

  

生成一个shell,然后在该shell中执行该命令。

它有timeout选项,默认为0.

我通过将child_process.exec()改为child_process.execSync()来解决我的问题。

  

该方法在子进程之前不会返回的异常   已完全关闭。遇到timeout并发送killSignal后,该方法将不会返回,直到该流程完全退出。

timeout选项默认为undefined

同步方法会阻塞Node.js事件循环,暂停执行任何其他代码,直到生成的进程退出。