我想在 Bash 中生成多个子进程,但我希望父脚本保持运行,这样发送到父脚本的信号也会影响生成的子进程。
这不会这样做:
parent.bash
:
#!/usr/bin/bash
spawnedChildProcess1 &
spawnedChildProcess2 &
spawnedChildProcess3 &
Run Code Online (Sandbox Code Playgroud)
parent.bash
立即结束,并且生成的进程继续独立运行。
var promise = require('child-process-promise').spawn;
promise('some_command_producing_output')
.then(function (result) {
...
})
.catch(function (err) {
...
});
Run Code Online (Sandbox Code Playgroud)
我想要的是在命令在标准输出中生成输出后添加一些处理。所以最后我想创建一个像这样使用的函数:
RunCommandAndProcess('some_command_producing_output')
.then(function (result) {
...
})
.catch(function (err) {
...
});
Run Code Online (Sandbox Code Playgroud)
该函数应该使用子进程承诺中的承诺,等待产生成功结果并返回处理数据的承诺。
我有以下代码示例,现在我有了关于如何utils.promisify();
仅使用解决此问题的想法!不承诺!
const spawn = child_process.spawn('docker', ['--version']);
spawn.stdout.on('data', (data) => {
process.stdout.write(data);
});
spawn.on('error', () => {
process.stderr.write(error);
process.exit(1);
});
Run Code Online (Sandbox Code Playgroud)
第二个代码示例运行良好。
const promisifiedExecFile = promisify(child_process.execFile);
async function test() {
const version = await promisifiedExecFile('docker', ['--version']);
console.log(version);
}
test();
Run Code Online (Sandbox Code Playgroud) 好的,所以我最近开始学习erlang,但对它不断返回的错误感到困惑.我做了一些更改,但我一直在收到错误.据我所知,语法是正确的,但显然我做错了.看一看...
-module(pidprint).
-export([start/0]).
dostuff([]) ->
receive
begin ->
io:format("~p~n", [This is a Success])
end.
sender([N]) ->
N ! begin,
io:format("~p~n", [N]).
start() ->
StuffPid = spawn(pidprint, dostuff, []),
spawn(pidprint, sender, [StuffPid]).
Run Code Online (Sandbox Code Playgroud)
基本上我想编译脚本,调用start,生成"dostuff"进程,将其进程标识符传递给"sender"进程,然后将其打印出来.最后,我想使用最初传入发送方的进程标识符将原子"begin"发送到"dostuff"进程.
当我尝试使用c()
编译脚本时,我会遇到错误.他们来了..
./pidprint.erl:6: syntax error before: '->'
./pidprint.erl:11: syntax error before: ','
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我在erlang中遇到'spawn'的问题,似乎进程只是在一段时间后死亡.这是简单的代码:
-module(simple).
-export([server/1, client/1, owner/1, spawn_n/2, start/1, main/1]).
server(State) ->
receive
{request,Return_PID} ->
io:format("SERVER ~w: Client request recieved from ~w~n", [self(),Return_PID]),
NewState = State + 1,
Return_PID ! {hit_count,NewState},
server(NewState);
{server_owner,Owner_PID} ->
io:format("SERVER ~w: Owner request recieved from ~w~n", [self(), Owner_PID]),
Owner_PID ! {hit_count,State},
server(State);
reset ->
io:format("SERVER ~w: State reset to zero.~n", [self()]),
server(0)
end.
client(Server_Address) ->
Server_Address ! {request, self()},
receive
{hit_count,Number} ->
io:format("CLIENT ~w: Hit count was ~w~n", [self(),Number])
end.
owner(Server_PID) ->
timer:sleep(random:uniform(100)),
Server_PID ! {server_owner,self()},
receive …
Run Code Online (Sandbox Code Playgroud) 我正在编写几个java程序,并且在完成我想做的任何事情后,需要在单独的JVM中终止/清理.为此,我需要获取我正在创建的java进程的PID.
我正在努力跟随
http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options
努力做到
./node_modules/.bin/mocha --reporter json -u tdd
Run Code Online (Sandbox Code Playgroud)
我试过了
var mocha = spawn('./node_modules/.bin/mocha', ['--reporter json -u tdd']);
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误
error: unknown option `--reporter json -u tdd'
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
据我所知,gevent中池的想法是随时限制并发请求的总数,数据库或API等.
假设我有这样的代码,我产生的greenlets比我有更多的greenlets Pool
:
import gevent.pool
pool = gevent.pool.Pool(50)
jobs = []
for number in xrange(300):
jobs.append(pool.spawn(do_something, number))
total_result = [x.get() for x in jobs]
Run Code Online (Sandbox Code Playgroud)
尝试生成第51个请求时的实际行为是什么?第51个请求何时处理?
有人可以解释为什么即使我将进程数设置为1以上,也只在下面的代码中创建了两个进程子进程.每个MPI_Comm_spawn可以使用下面的代码创建两个子进程,在使用的代码中使用mpirun创建的每个进程将调用MPI_Comm_spawn一次并将创建2(#define NUM_SPAWNS 2)子进程,所以如果我调用N进程然后子进程2*N进程必须创造孩子.但这不会发生.
在下面的例子中,孩子的数量必须是4*2 = 8.但......
例如:
:〜$ mpirun -np 4 ./spawn_example
输出:
我是父母.
我是父母.
我是父母.
我是父母.
我是产卵的.
我是产卵的.
我正在尝试在我的项目的Grunt配置中设置当前的Git SHA,但是当我尝试从另一个任务访问它时它不可用,我缺少什么?
grunt.registerTask('sha', function () {
var done = this.async();
grunt.util.spawn({
cmd: 'git',
args: ['rev-parse', '--short', 'HEAD']
}, function (err, res) {
if (err) {
grunt.fail.fatal(err);
} else {
grunt.config.set('git', {sha: res.stdout});
if (grunt.option('debug') || grunt.option('verbose')) {
console.log("[sha]:", res.stdout);
}
}
done();
});
});
Run Code Online (Sandbox Code Playgroud)
运行任务后,我希望配置在另一个任务配置中可用:
requirejs: {
dist: {
...
out: '<%= app.dist %>/scripts/module_name.<%= git.sha %>.js'
...
}
}
Run Code Online (Sandbox Code Playgroud)
所以有什么问题?
问题是Require JS正在写入文件public/scripts/module_name..js
,SHA在配置中不可用(文件名应该是public/scripts/module_name.d34dc0d3.js
).
更新:
问题是我正在运行requirejs
任务grunt-concurrent
,因此Grunt配置不可用requirejs
.
grunt.registerTask('build', [
...
'getsha',
'concurrent:dist',
... …
Run Code Online (Sandbox Code Playgroud)