- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在尝试在 AWS Lambda 函数中生成一个同步子进程(以运行 ffprobe),但它几乎立即(200 毫秒)因信号 SIGSEGV 而死。
我对段错误的理解是,它是一个试图访问不允许访问的内存的进程。我尝试将内存增加到 1024MB(我使用 128MB,因为每次执行只使用大约 56MB),但这并没有改变任何东西。
我知道我不是唯一遇到此问题的人:https://forums.aws.amazon.com/thread.jspa?threadID=229397
有人知道如何解决这个问题吗?
2016 年 4 月 25 日更新
为了清楚起见,我正在运行的代码是:
import { spawnSync } from 'child_process';
exports.handler = (event, context) => {
process.env.PATH = `${process.env.PATH}:${process.env.LAMBDA_TASK_ROOT}`;
const ffprobe = './ffprobe';
const bucket = event.Records[0].s3.bucket.name;
const key = event.Records[0].s3.object.key;
console.log(`bucket: ${bucket}`);
console.log(`key: ${key}`);
const url = 'http://my-clip-url.com'; // An s3 presigned url.
if (!url) {
throw new Error('Clip does not exist.');
}
const command = `-show_format -show_streams -print_format json ${url}`;
try {
const child = spawnSync(ffprobe, command.split(' '));
console.log(`stdout: ${child.stdout.toString()}`)
console.log(`stderr: ${child.stderr.toString()}`)
console.log(`status: ${child.status.toString()}`)
console.log(`signal: ${child.signal.toString()}`)
} catch (exception) {
console.log(`Process crashed! Error: ${exception}`);
}
};
其输出为:
START RequestId: 6d72847 Version: $LATEST
2016-04-25T19:32:26.154Z 6d72847 stdout:
2016-04-25T19:32:26.155Z 6d72847 stderr:
2016-04-25T19:32:26.155Z 6d72847 status: 0
2016-04-25T19:32:26.155Z 6d72847 signal: SIGSEGV
END RequestId: 6d72847
REPORT RequestId: 6d72847 Duration: 4151.10 ms Billed Duration: 4200 ms Memory Size: 256 MB Max Memory Used: 84 MB
我正在使用无服务器框架来 babelify 和部署我的代码。
注意:我已经尝试在 EC2 上的 ami-bff32ccc 实例上运行这个二进制文件( http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html )并且它可以工作。所以这一定是我正在做的事情(我是如何执行 ffprobe 的)。
最佳答案
试试这个。让您的 Lambda 函数生成一个执行此操作的 bash shell:
ulimit -c 无限制
光盘/tmp
$LAMBDA_TASK_ROOT/ffprobe ...
然后检查名为“/tmp/core”的文件,如果存在,将其复制到 S3 存储桶(或其他),并使用 gdb 在您的开发系统或 EC2 主机上对其进行分析。我自己还没有验证这一点,但我知道默认情况下 ulimit 将为零,核心文件将转储到当前目录。请注意,这些细节如有更改,恕不另行通知(如果我没记错的话,最近发生了变化。)
当然,“cd”可能发生在 lambda 函数中。如果 nodejs 提供了一种设置 ulimit 的方法,它也可能发生在那里。
[编辑:正确的模式是/tmp/core.%e.%p,参见“man core”来解释。]
关于node.js - 来自 AWS Lambda 函数中的 spawn child_process 的 SIGSEGV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36749987/
.bat文件为:。在命令提示符下运行cmd/c a.bat将打开记事本窗口。并且在关闭窗口之前打印Foobar。我可以在不关闭记事本的情况下运行下一个命令。。但是,在node.js child_pro
有一段时间以来,我一直在尝试达成一些目前对我来说还行不通的事情。 对于 nodejs,我喜欢运行交互式 sh-command 并在命令退出后使用 sh-command 输出。我喜欢编写一个可生成的生成
我正在使用 Node.js 下的 Bluebird Promise 库,非常棒!但我有一个问题: 如果您查看 Node 的文档 child_process.exec和 child_process.ex
此代码适用于 Windows 和 Mac OS X: var exec = require( 'child_process' ).exec exec( 'git clone git@github.co
我在MacOS和Linux中使用node.js v0.10.12时遇到了这个错误,这段代码在 Windows 7 中工作正常。唯一的区别是在 Windows 7 上我有管理员 ID,在 MacOSX
我在 Electron 项目中使用 npm 库“child_process”来捕获带有 spawn 的 C 程序的标准输出流。但是,当我尝试记录 child.stdout.on('data') 捕获的
在 atom-text-editor 插件开发中,我运行一个 child_process,如 cp = require 'child_process' command = "python /home/
我正在尝试在我的 Node 脚本中创建一个虚拟 bash,它从另一个用户上下文中执行命令。 var spawn = require('child_process').spawn; var termin
我有一个在 electron 中运行的 angular2 webpack 项目。我正在尝试使用 shelljs 但 webpack 无法构建并出现错误: [0] ERROR in ./~/shellj
React Native v0.23.0 Node v5.11.0 Windows 10 10586(我在 OSX 上尝试并得到相同的错误) 我尝试在React Native中编写var cp = r
try { var output = child_process.execSync(cmd); } catch (ex) { return 0 } return output.toSt
我正在尝试使用 node.js 执行一堆 bash 命令。我使用 child_process.exec 来执行命令。 var child_process = require('child_proces
这个问题在这里已经有了答案: How to print both to stdout and file in C (4 个答案) Writing to both stdout & a file (7
我正在使用 child_process 运行最终调用的脚本 ssh -t server "sudo command" 我回来了: Pseudo-terminal will not be allocat
我正在尝试在 Node 中执行一个子进程,其名称来自发布请求。我使用的是express,因此是app.post()。我的代码如下。 app.post('/*', function(req, res)
我需要验证 child_process 是否已成功终止,因为如果该进程仍然存在,我将无法执行下一步操作。 var proc = require('child_process'); var prog =
我正在尝试使用目标设备启动 cordova 命令。我已经测试了该命令并且它有效,但是当我尝试用我的代码生成它时,它忽略等号,因此不会运行。此代码确实可以工作,只是不添加 "--target='iPho
我正在使用 exec() 运行终端命令以在 electron mac 应用程序中显示对话框。 我使用的代码: var exec = require('child_process').exec; var
如何在 node.js 上生成此命令 (/usr/bin/which flac): var spawn = require('child_process').spawn; var cmd = spaw
我正在尝试 execute a child在不同的目录中处理,然后是其父目录。 var exec = require('child_process').exec; exec( 'pwd',
我是一名优秀的程序员,十分优秀!