首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从execvP调用execl、execle、execlp、execlp、execv、execvp或execvp的方法

从execvP调用execl、execle、execlp、execlp、execv、execvp或execvp的方法
EN

Stack Overflow用户
提问于 2015-12-15 13:22:14
回答 3查看 1.2K关注 0票数 3

POSIX系统公开了一系列exec函数,允许将可能不同的东西加载到当前进程中,保持打开的文件描述符、进程标识符等。

这可以基于各种原因来完成,在我的例子中,这是引导--我希望更改我自己进程的命令行选项,然后在现有进程上重新加载它,这样就不会有子进程。

不幸的是,令我惊讶的是,我找不到在Node.js中调用任何Node.js函数的方法。那么,用其他映像替换当前正在运行的Node.js进程的正确方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-30 11:28:23

我创建了一个模块来从NodeJS:https://github.com/OrKoN/native-exec调用execvp函数。

它的工作方式如下:

代码语言:javascript
复制
var exec = require('native-exec');

exec('ls', {
  newEnvKey: newEnvValue,
}, '-lsa'); // => the process is replaced with ls, which runs and exits

因为它是一个本机节点加载项,所以需要安装一个C++编译器。在Docker,Mac和Linux上工作得很好。可能在Windows上不起作用。用节点6、7和8进行测试。

票数 3
EN

Stack Overflow用户

发布于 2017-06-29 19:58:36

最后我使用了ffi模块,并从libc导出了execvp

票数 2
EN

Stack Overflow用户

发布于 2019-08-13 20:03:49

下面是一个使用节点-ffi与节点v10一起工作的示例。(唉,不是v12)

代码语言:javascript
复制
#!/usr/bin/node

"use strict";

const ffi = require('ffi');
const ref = require('ref');
const ArrayType = require('ref-array');
const stringAry = ArrayType('string');

const readline = require("readline");
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question('Login: ', (username) => {
    username = username.replace(/[^a-z0-9_]/g, "");
    rl.close();
    execvp("/usr/bin/ssh", "-e", "none", username+'@localhost');
});



function execvp() {
    var current = ffi.Library(null, 
                              { execvp: ['int', ['string',
                                                 stringAry]],
                                dup2: ['int', ['int', 'int']]});
    current.dup2(process.stdin._handle.fd, 0);
    current.dup2(process.stdout._handle.fd, 1);
    current.dup2(process.stderr._handle.fd, 2);
    var ret = current.execvp(arguments[0], Array.prototype.slice.call(arguments).concat([ref.NULL]));    
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34290403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档