初学nodejs,打算用这来做一个公司的服务器管理系统,需要用到执行shell,从网上了解到调用shell是用新开一个子进程的方法:
var value = 0; var process = require('child_process'); process.exec('shell命令', function(err, stdout, errout){ // err是执行结果,是否有错 // stdout是标准输出,即shell命令执行后的结果 // errout是错误输出 value = stdout;// 把返回值给value }); res.json({"value":value});
这么做看起来是没什么问题,但是,执行完会发现value一直是0,原因就在于多线程。
所以,正确解决应该是:
var value = 0; var process = require('child_process'); value = process.execSync('ps -fu pex | grep ' + key + ' | grep -v grep | wc -l').toString(); res.json({"value":value});
没有使用process.exec方法测试,不知道这种是不是也可以。
这个是从https://stackoverflow.com/questions/30134236/use-child-process-execsync-but-keep-output-in-console看到的:
初学,不知道有没有其他更好的解决办法,有大神望指教。