2016-03-03 19 views
8

Theo the docs cho child_process.spawn tôi mong chờ để có thể chạy một quá trình con ở mặt trước và cho phép quá trình nút riêng của mình để thoát khỏi như vậy:Node.js: Làm thế nào để đẻ trứng con tách ra ở tiền cảnh và xuất cảnh

handoff-exec.js:

'use strict'; 

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

// this console.log before the spawn seems to cause 
// the child to exit immediately, but putting it 
// afterwards seems to not affect it. 
//console.log('hello'); 

var child = spawn(
    'ping' 
, [ '-c', '3', 'google.com' ] 
, { detached: true, stdio: 'inherit' } 
); 

child.unref(); 

Thay vì nhìn thấy đầu ra của lệnh ping, nó chỉ đơn giản là thoát ra mà không bất kỳ thông báo hoặc lỗi.

node handoff-exec.js 
hello 
echo $? 
0 

Vì vậy, ... có thể trong node.js (hoặc ở tất cả) để chạy một đứa trẻ ở nền trước khi thoát gốc không?

CẬP NHẬT: Tôi nhận thấy rằng việc xóa console.log('hello'); cho phép trẻ chạy, tuy nhiên, nó vẫn không vượt qua kiểm soát tiêu chuẩn trước cho trẻ.

+0

Bản sao có thể có của [Làm cách nào để lắng nghe và sinh ra nhiều tiến trình con trong nodejs] (http://stackoverflow.com/questions/32358845/how-do-i-listen-and-spawn-multiple-child-process- in-nodejs) –

+0

Không. Đó là về việc sử dụng một đóng trong JavaScript để nắm bắt các tham chiếu JS tới nhiều tiến trình con. Đây là về các tham chiếu quy trình và cho phép trẻ kiểm soát đầu vào tiêu chuẩn. – CoolAJ86

+0

Đối với những gì nó có giá trị, tôi đã cố gắng chạy mã của bạn và nó đã làm việc như mong đợi cho tôi - quá trình nút đã thoát, và đầu ra lệnh ping được in ra. Đây là trên Mac OS và node.js v5.4.1. Nó không hoạt động nếu tôi uncomment console.log - mà tôi thấy rất lạ. –

Trả lời

-1

Bạn đang thiếu

// Listen for any response: 
child.stdout.on('data', function (data) { 
    console.log(data.toString()); 
}); 

// Listen for any errors: 
child.stderr.on('data', function (data) { 
    console.log(data.toString()); 
}); 

và bạn không cần child.unref();

+1

Điều đó sẽ khiến quá trình cha mẹ tiếp tục chạy. – CoolAJ86

Các vấn đề liên quan