标签: spawn

child_process spawn()中的通配符?

我想在node.js中使用spawn执行像"doSomething ./myfiles/*.csv"这样的命令.我想使用spawn而不是exec,因为它是某种监视进程,我需要stdout输出.

我试过这个

var spawn = require('child_process').spawn; 
spawn("doSomething", ["./myfiles/*.csv"]);
Run Code Online (Sandbox Code Playgroud)

但是,通配符*.csv将不会被解释.

使用spawn()时是否无法使用通配符?还有其他可能解决这个问题吗?

谢谢

托本

exec spawn node.js

13
推荐指数
3
解决办法
2328
查看次数

通过Grunt运行Node应用程序

我正在尝试将我的Node应用程序作为Grunt任务运行.但是,我需要将其作为子进程生成,以允许我并行运行监视任务.

这有效:

grunt.registerTask('start', function () {
  grunt.util.spawn(
    { cmd: 'node'
    , args: ['app.js']
    })

  grunt.task.run('watch:app')
})
Run Code Online (Sandbox Code Playgroud)

但是,当监视任务检测到更改时,这将再次触发启动任务.在我生成我的Node应用程序的另一个子进程之前,我需要杀死前一个.

但是,我无法弄清楚如何杀死这个过程.这样的东西不起作用:

var child

grunt.registerTask('start', function () {
  if (child) child.kill()
  child = grunt.util.spawn(
    { cmd: 'node'
    , args: ['app.js']
    })

  grunt.task.run('watch:app')
})
Run Code Online (Sandbox Code Playgroud)

看起来:

  1. 即使我将生成的进程存储在函数上下文之外的变量中,它也不会持久存在,因此下次启动任务时,child就是undefined.
  2. child没有kill功能......

process spawn node.js gruntjs

13
推荐指数
2
解决办法
1万
查看次数

node.js使用单独的stdout和stderr流以交互方式生成子进程

考虑以下C程序(test.c):

#include <stdio.h>

int main() {
  printf("string out 1\n");
  fprintf(stderr, "string err 1\n");
  getchar();
  printf("string out 2\n");
  fprintf(stderr, "string err 2\n");
  fclose(stdout);
}
Run Code Online (Sandbox Code Playgroud)

哪个应该打印一行到stdout,一行到stderr,然后等待用户输入,然后另一行到stdout,另一行到stderr.非常基本!在编译并在命令行上运行时,程序的输出完成(收到getchar()的用户输入):

$ ./test 
string out 1
string err 1

string out 2
string err 2
Run Code Online (Sandbox Code Playgroud)

尝试使用带有以下代码的nodejs将此程序生成为子进程时:

var TEST_EXEC = './test';

var spawn = require('child_process').spawn;
var test = spawn(TEST_EXEC);

test.stdout.on('data', function (data) {
  console.log('stdout: ' + data);
});

test.stderr.on('data', function (data) {
  console.log('stderr: ' + data);
});

// Simulate entering data for getchar() after 1 second
setTimeout(function() { …
Run Code Online (Sandbox Code Playgroud)

stdout spawn unbuffered node.js

13
推荐指数
2
解决办法
1万
查看次数

从python中产生进程

我产生一个脚本,从这样的Web应用程序运行很长一段时间:

os.spawnle(os.P_NOWAIT, "../bin/producenotify.py", "producenotify.py", "xx",os.environ)
Run Code Online (Sandbox Code Playgroud)

该脚本成功生成并运行,但直到它结束我无法释放Web应用程序使用的端口,或者换句话说,我无法重新启动Web应用程序.我如何产生一个过程并使其完全独立于Web应用程序?

这是在linux操作系统上.

python process spawn

12
推荐指数
2
解决办法
3万
查看次数

如果脚本被杀死,node.js会产生进程

是否有可能确保使用node.js生成的进程child_process将在父级被杀死时被终止?

这是一个示例脚本

var spawn = require('child_process').spawn;
var log_tail = spawn("tail", ["-f", "/dev/null"]);

setInterval(function() {
  console.log('just chilling');
}, 10000);
Run Code Online (Sandbox Code Playgroud)

如果我查看进程树,我会看到:

$ ps faux
ubuntu    9788  0.0  0.0  73352  1840 ?        S    15:04   0:00  |   \_ sshd: ubuntu@pts/7  
ubuntu    9789  0.0  0.2  25400  6804 pts/7    Ss   15:04   0:00  |       \_ -bash
ubuntu   10149  1.0  0.2 655636  8696 pts/7    Sl+  15:07   0:00  |           \_ node test.js
ubuntu   10151  0.0  0.0   7184   608 pts/7    S+   15:07   0:00  |               \_ tail -f /dev/null
Run Code Online (Sandbox Code Playgroud)

然后我需要停止该脚本,不能ctrl-c(说我的ssh连接丢失)

$ …
Run Code Online (Sandbox Code Playgroud)

spawn child-process node.js

12
推荐指数
1
解决办法
4921
查看次数

Spa JS上的Spawn(Windows Server 2012)

当我通过Node运行时:

var spawn = require('child_process').spawn;

ls = spawn('ls', ['C:\\Users']);

ls.on('error', function (err) {
  console.log('ls error', err);
});

ls.stdout.on('data', function (data) {
    console.log('stdout: ' + data);
});

ls.stderr.on('data', function (data) {
    console.log('stderr: ' + data);
});

ls.on('close', function (code) {
    console.log('child process exited with code ' + code);
});
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ls error { [Error: spawn ENOENT] code: 'ENOENT', errno: 'ENOENT', syscall: 'spawn' }
child process exited with code -1
Run Code Online (Sandbox Code Playgroud)

在Windows Server 2012上.有什么想法吗?

windows spawn node.js windows-server-2012

12
推荐指数
3
解决办法
1万
查看次数

分叉子进程并注入依赖

我目前在一个阻塞的模块中有一个操作,所以我正在考虑把它变成一个我代替的子进程.

如果我想这样做,那么我当然需要修改我的模块的架构.该模块要求通过将模块作为函数调用来注入依赖项,并传入依赖项,如下所示:

var dependency = { name: "Bob" }
require('worker')(dependency)
Run Code Online (Sandbox Code Playgroud)

然后在我的worker模块中:

module.exports = function (dependency) {
  // Outputs { name: "Bob" }
  console.log(dependency)
}
Run Code Online (Sandbox Code Playgroud)

如何将此示例转换为分叉的子进程?

dependency-injection process parent-child spawn node.js

11
推荐指数
1
解决办法
2万
查看次数

Node.js Spawn与执行

在观看我学习Node的在线培训视频中,讲述者说:“对于包含大量数据的较长流程而言,生成更好,而对于短数据则执行效果更好。”

为什么是这样?Node.js中child_process生成和执行函数之间有什么区别,我何时知道要使用哪个?

javascript function spawn node.js

11
推荐指数
3
解决办法
3905
查看次数

为什么在 Python 多处理中将 start 方法从 'fork' 更改为 'spawn' 不允许我再运行我的工作?

我可以使用multiprocessing.Processstart 方法运行后台函数fork。出于某种原因,我需要这个子进程在运行时启动一个新环境。因此,我将 start 方法设置为spawnviamultiprocessing.set_start_method('spawn')并通过运行作业job.start(),出现以下错误:

Can't pickle <class 'module'>: attribute lookup module on builtins failed
Run Code Online (Sandbox Code Playgroud)

但是,我不会在我调用的函数中使用pickle。我可能做错了什么?在spawn模式下运行进程时,是否有我应该遵循的一般经验法则?

仅供参考:我在一台装有 Ubuntu 16.04 的机器上

python multiprocessing spawn python-3.x python-multiprocessing

11
推荐指数
1
解决办法
1万
查看次数

C++ 启动另一个进程的最佳方法?

我已经有一段时间没有这样做了,过去我使用“spawn”来创建进程。

现在我想从我的应用程序异步启动进程,以便我的应用程序继续在后台执行,并且不会因启动进程而被阻止。

我还希望能够与启动的进程进行通信。当我启动进程时,我将向其发送启动程序进程 id,以便启动的进程可以使用其 pid 与启动程序进行通信。

我正在寻找多平台的解决方案,不特定于任何平台/操作系统的最佳使用方法是什么?

我正在用 C++ 编写此内容,我不想要将我与任何第三方许可产品联系在一起的解决方案。

我不想使用线程,解决方案必须是创建新进程。

c++ fork spawn

11
推荐指数
1
解决办法
2万
查看次数